diff --git a/QGCCommon.pri b/QGCCommon.pri
index 7f27482..bf0a81b 100644
--- a/QGCCommon.pri
+++ b/QGCCommon.pri
@@ -71,6 +71,7 @@ equals(QT_MAJOR_VERSION, 5) | greaterThan(QT_MINOR_VERSION, 5) {
message("iOS build")
CONFIG += iOSBuild MobileBuild app_bundle
DEFINES += __ios__
+ DEFINES += QGC_NO_GOOGLE_MAPS
QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
QMAKE_IOS_TARGETED_DEVICE_FAMILY = 1,2 # Universal
QMAKE_LFLAGS += -Wl,-no_pie
diff --git a/ios/iOS-Info.plist b/ios/iOS-Info.plist
index bdb417a..1343e18 100644
--- a/ios/iOS-Info.plist
+++ b/ios/iOS-Info.plist
@@ -5,7 +5,7 @@
CFBundleDisplayName
QGroundControl
CFBundleExecutable
- qgroundcontrol
+ $(EXECUTABLE_NAME)
NSHumanReadableCopyright
Open Source Flight Systems GmbH - Internal Build
CFBundleIconFile
@@ -13,7 +13,7 @@
CFBundleIdentifier
org.QGroundControl.qgc
CFBundleName
- QGroundControl
+ $(PRODUCT_NAME)
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/src/FlightMap/FlightMapSettings.cc b/src/FlightMap/FlightMapSettings.cc
index eff30bb..455c86d 100644
--- a/src/FlightMap/FlightMapSettings.cc
+++ b/src/FlightMap/FlightMapSettings.cc
@@ -27,33 +27,33 @@ FlightMapSettings::FlightMapSettings(QGCApplication* app)
void FlightMapSettings::setToolbox(QGCToolbox *toolbox)
{
QGCTool::setToolbox(toolbox);
-
qmlRegisterUncreatableType ("QGroundControl", 1, 0, "FlightMapSetting", "Reference only");
-
- _supportedMapProviders << "Bing" << "Google"; // << "OpenStreetMap";
-
+ _supportedMapProviders << "Bing";
+#ifndef QGC_NO_GOOGLE_MAPS
+ _supportedMapProviders << "Google";
+#endif
_loadSettings();
}
void FlightMapSettings::_storeSettings(void)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.setValue(_mapProviderKey, _supportedMapProviders.contains(_mapProvider) ? _mapProvider : _defaultMapProvider);
}
void FlightMapSettings::_loadSettings(void)
{
+#ifdef QGC_NO_GOOGLE_MAPS
+ _mapProvider = _defaultMapProvider;
+#else
QSettings settings;
-
settings.beginGroup(_settingsGroup);
_mapProvider = settings.value(_mapProviderKey, _defaultMapProvider).toString();
-
if (!_supportedMapProviders.contains(_mapProvider)) {
_mapProvider = _defaultMapProvider;
}
-
+#endif
_setMapTypesForCurrentProvider();
}
@@ -75,24 +75,21 @@ void FlightMapSettings::setMapProvider(const QString& mapProvider)
void FlightMapSettings::_setMapTypesForCurrentProvider(void)
{
_mapTypes.clear();
-
+#ifdef QGC_NO_GOOGLE_MAPS
+ _mapTypes << "Street Map" << "Satellite Map" << "Hybrid Map";
+#else
if (_mapProvider == "Bing") {
_mapTypes << "Street Map" << "Satellite Map" << "Hybrid Map";
} else if (_mapProvider == "Google") {
_mapTypes << "Street Map" << "Satellite Map" << "Terrain Map";
- /*
- } else if (_mapProvider == "OpenStreetMap") {
- _mapTypes << "Street Map";
- */
}
-
+#endif
emit mapTypesChanged(_mapTypes);
}
QString FlightMapSettings::mapType(void)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(_mapProvider);
return settings.value(_mapTypeKey, "Satellite Map").toString();
@@ -101,18 +98,15 @@ QString FlightMapSettings::mapType(void)
void FlightMapSettings::setMapType(const QString& mapType)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(_mapProvider);
settings.setValue(_mapTypeKey, mapType);
-
emit mapTypeChanged(mapType);
}
void FlightMapSettings::saveMapSetting (const QString &mapName, const QString& key, const QString& value)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(mapName);
settings.setValue(key, value);
@@ -121,7 +115,6 @@ void FlightMapSettings::saveMapSetting (const QString &mapName, const QString& k
QString FlightMapSettings::loadMapSetting (const QString &mapName, const QString& key, const QString& defaultValue)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(mapName);
return settings.value(key, defaultValue).toString();
@@ -130,7 +123,6 @@ QString FlightMapSettings::loadMapSetting (const QString &mapName, const QString
void FlightMapSettings::saveBoolMapSetting (const QString &mapName, const QString& key, bool value)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(mapName);
settings.setValue(key, value);
@@ -139,7 +131,6 @@ void FlightMapSettings::saveBoolMapSetting (const QString &mapName, const QStrin
bool FlightMapSettings::loadBoolMapSetting (const QString &mapName, const QString& key, bool defaultValue)
{
QSettings settings;
-
settings.beginGroup(_settingsGroup);
settings.beginGroup(mapName);
return settings.value(key, defaultValue).toBool();
diff --git a/src/FlightMap/FlightMapSettings.h b/src/FlightMap/FlightMapSettings.h
index e53c7db..66e7b39 100644
--- a/src/FlightMap/FlightMapSettings.h
+++ b/src/FlightMap/FlightMapSettings.h
@@ -16,6 +16,12 @@
#include
#include
+/*
+ TODO: Map settings should come from QGCMapEngineManager. What is currently in
+ FlightMapSettings should be moved there so all map related funtions are in
+ one place.
+ */
+
class FlightMapSettings : public QGCTool
{
Q_OBJECT
@@ -35,6 +41,9 @@ public:
/// Map type to be used for all maps
Q_PROPERTY(QString mapType READ mapType WRITE setMapType NOTIFY mapTypeChanged)
+ /// Is Google Maps Enabled
+ Q_PROPERTY(bool googleMapEnabled READ googleMapEnabled CONSTANT)
+
Q_INVOKABLE void saveMapSetting (const QString &mapName, const QString& key, const QString& value);
Q_INVOKABLE QString loadMapSetting (const QString &mapName, const QString& key, const QString& defaultValue);
Q_INVOKABLE void saveBoolMapSetting (const QString &mapName, const QString& key, bool value);
@@ -53,6 +62,13 @@ public:
QStringList mapProviders() { return _supportedMapProviders; }
+#ifdef QGC_NO_GOOGLE_MAPS
+ bool googleMapEnabled () { return false; }
+#else
+ bool googleMapEnabled () { return true; }
+#endif
+
+
signals:
void mapProviderChanged (const QString& mapProvider);
void mapTypesChanged (const QStringList& mapTypes);
diff --git a/src/QtLocationPlugin/QGCMapEngine.cpp b/src/QtLocationPlugin/QGCMapEngine.cpp
index 6b39c44..f36d0e6 100644
--- a/src/QtLocationPlugin/QGCMapEngine.cpp
+++ b/src/QtLocationPlugin/QGCMapEngine.cpp
@@ -43,9 +43,11 @@ struct stQGeoTileCacheQGCMapTypes {
// Changes here must reflect those in QGeoTiledMappingManagerEngineQGC.cpp
stQGeoTileCacheQGCMapTypes kMapTypes[] = {
+#ifndef QGC_LIMITED_MAPS
{"Google Street Map", UrlFactory::GoogleMap},
{"Google Satellite Map", UrlFactory::GoogleSatellite},
{"Google Terrain Map", UrlFactory::GoogleTerrain},
+#endif
{"Bing Street Map", UrlFactory::BingMap},
{"Bing Satellite Map", UrlFactory::BingSatellite},
{"Bing Hybrid Map", UrlFactory::BingHybrid},
diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.cpp b/src/QtLocationPlugin/QGCMapUrlEngine.cpp
index 9b7bd81..549fa19 100644
--- a/src/QtLocationPlugin/QGCMapUrlEngine.cpp
+++ b/src/QtLocationPlugin/QGCMapUrlEngine.cpp
@@ -33,20 +33,24 @@
//-----------------------------------------------------------------------------
UrlFactory::UrlFactory()
: _timeout(5 * 1000)
+#ifndef QGC_NO_GOOGLE_MAPS
, _googleVersionRetrieved(false)
, _googleReply(NULL)
+#endif
{
QStringList langs = QLocale::system().uiLanguages();
if (langs.length() > 0) {
_language = langs[0];
}
+#ifndef QGC_NO_GOOGLE_MAPS
// Google version strings
_versionGoogleMap = "m@338000000";
_versionGoogleSatellite = "198";
_versionGoogleLabels = "h@336";
_versionGoogleTerrain = "t@132,r@338000000";
_secGoogleWord = "Galileo";
+#endif
// BingMaps
_versionBingMaps = "563";
}
@@ -54,8 +58,10 @@ UrlFactory::UrlFactory()
//-----------------------------------------------------------------------------
UrlFactory::~UrlFactory()
{
+#ifndef QGC_NO_GOOGLE_MAPS
if(_googleReply)
_googleReply->deleteLater();
+#endif
}
@@ -123,6 +129,7 @@ UrlFactory::getTileURL(MapType type, int x, int y, int zoom, QNetworkAccessManag
request.setRawHeader("Accept", "*/*");
request.setRawHeader("User-Agent", _userAgent);
switch (type) {
+#ifndef QGC_NO_GOOGLE_MAPS
case GoogleMap:
case GoogleSatellite:
case GoogleLabels:
@@ -130,6 +137,7 @@ UrlFactory::getTileURL(MapType type, int x, int y, int zoom, QNetworkAccessManag
case GoogleHybrid:
request.setRawHeader("Referrer", "https://www.google.com/maps/preview");
break;
+#endif
case BingHybrid:
case BingMap:
case BingSatellite:
@@ -152,6 +160,7 @@ UrlFactory::getTileURL(MapType type, int x, int y, int zoom, QNetworkAccessManag
}
//-----------------------------------------------------------------------------
+#ifndef QGC_NO_GOOGLE_MAPS
void
UrlFactory::_getSecGoogleWords(int x, int y, QString &sec1, QString &sec2)
{
@@ -163,12 +172,16 @@ UrlFactory::_getSecGoogleWords(int x, int y, QString &sec1, QString &sec2)
sec1 = "&s=";
}
}
+#endif
//-----------------------------------------------------------------------------
QString
UrlFactory::_getURL(MapType type, int x, int y, int zoom, QNetworkAccessManager* networkManager)
{
switch (type) {
+#ifdef QGC_NO_GOOGLE_MAPS
+ Q_UNUSED(networkManager);
+#else
case GoogleMap:
{
// http://mt1.google.com/vt/lyrs=m
@@ -215,6 +228,7 @@ UrlFactory::_getURL(MapType type, int x, int y, int zoom, QNetworkAccessManager*
return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(_getServerNum(x, y, 4)).arg(request).arg(_versionGoogleTerrain).arg(_language).arg(x).arg(sec1).arg(y).arg(zoom).arg(sec2);
}
break;
+#endif
/*
case OpenStreetMap:
{
@@ -376,6 +390,7 @@ UrlFactory::_getServerNum(int x, int y, int max)
}
//-----------------------------------------------------------------------------
+#ifndef QGC_NO_GOOGLE_MAPS
void
UrlFactory::_networkReplyError(QNetworkReply::NetworkError error)
{
@@ -386,15 +401,18 @@ UrlFactory::_networkReplyError(QNetworkReply::NetworkError error)
_googleReply = NULL;
}
}
-
+#endif
//-----------------------------------------------------------------------------
+#ifndef QGC_NO_GOOGLE_MAPS
void
UrlFactory::_replyDestroyed()
{
_googleReply = NULL;
}
+#endif
//-----------------------------------------------------------------------------
+#ifndef QGC_NO_GOOGLE_MAPS
void
UrlFactory::_googleVersionCompleted()
{
@@ -433,8 +451,10 @@ UrlFactory::_googleVersionCompleted()
_googleReply->deleteLater();
_googleReply = NULL;
}
+#endif
//-----------------------------------------------------------------------------
+#ifndef QGC_NO_GOOGLE_MAPS
void
UrlFactory::_tryCorrectGoogleVersions(QNetworkAccessManager* networkManager)
{
@@ -466,6 +486,7 @@ UrlFactory::_tryCorrectGoogleVersions(QNetworkAccessManager* networkManager)
networkManager->setProxy(proxy);
}
}
+#endif
#define AVERAGE_GOOGLE_STREET_MAP 4913
#define AVERAGE_GOOGLE_TERRAIN_MAP 19391
diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.h b/src/QtLocationPlugin/QGCMapUrlEngine.h
index ed7b3f5..9da7ae8 100644
--- a/src/QtLocationPlugin/QGCMapUrlEngine.h
+++ b/src/QtLocationPlugin/QGCMapUrlEngine.h
@@ -76,30 +76,38 @@ public:
static quint32 averageSizeForType (MapType type);
private slots:
+#ifndef QGC_NO_GOOGLE_MAPS
void _networkReplyError (QNetworkReply::NetworkError error);
void _googleVersionCompleted ();
void _replyDestroyed ();
+#endif
private:
QString _getURL (MapType type, int x, int y, int zoom, QNetworkAccessManager* networkManager);
- void _getSecGoogleWords (int x, int y, QString& sec1, QString& sec2);
+ QString _tileXYToQuadKey (int tileX, int tileY, int levelOfDetail);
int _getServerNum (int x, int y, int max);
+#ifndef QGC_NO_GOOGLE_MAPS
+ void _getSecGoogleWords (int x, int y, QString& sec1, QString& sec2);
void _tryCorrectGoogleVersions (QNetworkAccessManager* networkManager);
- QString _tileXYToQuadKey (int tileX, int tileY, int levelOfDetail);
+#endif
+private:
int _timeout;
- bool _googleVersionRetrieved;
- QNetworkReply* _googleReply;
- QMutex _googleVersionMutex;
QByteArray _userAgent;
QString _language;
// Google version strings
+#ifndef QGC_NO_GOOGLE_MAPS
+ bool _googleVersionRetrieved;
+ QNetworkReply* _googleReply;
+ QMutex _googleVersionMutex;
QString _versionGoogleMap;
QString _versionGoogleSatellite;
QString _versionGoogleLabels;
QString _versionGoogleTerrain;
QString _secGoogleWord;
+#endif
+
// BingMaps
QString _versionBingMaps;
diff --git a/src/QtLocationPlugin/QGeoCodeReplyQGC.cpp b/src/QtLocationPlugin/QGeoCodeReplyQGC.cpp
index 9bac1c7..ff54955 100644
--- a/src/QtLocationPlugin/QGeoCodeReplyQGC.cpp
+++ b/src/QtLocationPlugin/QGeoCodeReplyQGC.cpp
@@ -56,7 +56,7 @@
#include
#include
-enum QGeoCodeTypeGoogle {
+enum QGCGeoCodeType {
GeoCodeTypeUnknown,
StreetAddress, // indicates a precise street address.
Route, // indicates a named route (such as "US 101").
@@ -97,7 +97,7 @@ enum QGeoCodeTypeGoogle {
class JasonMonger {
public:
JasonMonger();
- QSet json2QGeoCodeTypeGoogle(const QJsonArray &types);
+ QSet json2QGCGeoCodeType(const QJsonArray &types);
private:
int _getCode(const QString &key);
QMap _m;
@@ -145,7 +145,7 @@ int JasonMonger::_getCode(const QString &key) {
return _m.value(key, GeoCodeTypeUnknown);
}
-QSet JasonMonger::json2QGeoCodeTypeGoogle(const QJsonArray &types) {
+QSet JasonMonger::json2QGCGeoCodeType(const QJsonArray &types) {
QSet result;
for (int i=0; i types = kMonger.json2QGeoCodeTypeGoogle(c[QStringLiteral("types")].toArray());
+ QSet types = kMonger.json2QGCGeoCodeType(c[QStringLiteral("types")].toArray());
QString long_name = c[QStringLiteral("long_name")].toString();
QString short_name = c[QStringLiteral("short_name")].toString();
if (types.contains(Country)) {
diff --git a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp
index 116310d..bf88126 100644
--- a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp
+++ b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp
@@ -95,9 +95,12 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian
// Changes here must reflect those in QGCMapEngine.cpp
QList mapTypes;
+
+#ifndef QGC_NO_GOOGLE_MAPS
mapTypes << QGeoMapType(QGeoMapType::StreetMap, "Google Street Map", "Google street map", false, false, UrlFactory::GoogleMap);
mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, "Google Satellite Map", "Google satellite map", false, false, UrlFactory::GoogleSatellite);
mapTypes << QGeoMapType(QGeoMapType::TerrainMap, "Google Terrain Map", "Google terrain map", false, false, UrlFactory::GoogleTerrain);
+#endif
/* TODO:
* Proper google hybrid maps requires collecting two separate bimaps and overlaying them.
@@ -116,8 +119,10 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian
*/
// MapQuest
+ /*
mapTypes << QGeoMapType(QGeoMapType::StreetMap, "MapQuest Street Map", "MapQuest street map", false, false, UrlFactory::MapQuestMap);
mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, "MapQuest Satellite Map", "MapQuest satellite map", false, false, UrlFactory::MapQuestSat);
+ */
/*
* These are OK as you need your own token for accessing it. Out-of-the box, QGC does not even offer these unless you enter a proper MapBox token.
diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml
index 1f0a19c..152e33b 100644
--- a/src/ui/preferences/GeneralSettings.qml
+++ b/src/ui/preferences/GeneralSettings.qml
@@ -280,7 +280,15 @@ QGCView {
//-----------------------------------------------------------------
//-- Map Providers
Row {
- spacing: ScreenTools.defaultFontPixelWidth
+
+ /*
+ TODO: Map settings should come from QGroundControl.mapEngineManager. What is currently in
+ QGroundControl.flightMapSettings should be moved there so all map related funtions are in
+ one place.
+ */
+
+ spacing: ScreenTools.defaultFontPixelWidth
+ visible: QGroundControl.flightMapSettings.googleMapEnabled
QGCLabel {
id: mapProvidersLabel