diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 23b68169b209ed7265258ad50c14aea0879a6781..b1d47d0ba5d409401e464f6fad50b1fe9d9c1b69 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -18,6 +18,7 @@
src/Airmap/QGroundControl.Airmap.qmldir
src/Airmap/AirspaceControl.qml
src/Airmap/AirspaceRegulation.qml
+ src/Airmap/AirmapSettings.qml
src/AnalyzeView/AnalyzeView.qml
src/ui/AppSettings.qml
src/ui/preferences/BluetoothSettings.qml
diff --git a/src/Airmap/AirmapSettings.qml b/src/Airmap/AirmapSettings.qml
new file mode 100644
index 0000000000000000000000000000000000000000..89f23400c3a4187dd8cce4b0c9d483fbe8eb69bb
--- /dev/null
+++ b/src/Airmap/AirmapSettings.qml
@@ -0,0 +1,195 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+
+import QtQuick 2.3
+import QtQuick.Controls 1.2
+import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.2
+import QtMultimedia 5.5
+import QtQuick.Layouts 1.2
+
+import QGroundControl 1.0
+import QGroundControl.FactSystem 1.0
+import QGroundControl.FactControls 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.MultiVehicleManager 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl.Controllers 1.0
+import QGroundControl.SettingsManager 1.0
+
+QGCView {
+ id: _qgcView
+ viewPanel: panel
+ color: qgcPal.window
+ anchors.fill: parent
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+
+ property real _labelWidth: ScreenTools.defaultFontPixelWidth * 20
+ property real _editFieldWidth: ScreenTools.defaultFontPixelWidth * 30
+ property real _panelWidth: _qgcView.width * _internalWidthRatio
+ property Fact _enableAirMapFact: QGroundControl.settingsManager.appSettings.enableAirMap
+ property bool _airMapEnabled: _enableAirMapFact.rawValue
+
+ readonly property real _internalWidthRatio: 0.8
+
+ QGCPalette { id: qgcPal }
+
+ QGCViewPanel {
+ id: panel
+ anchors.fill: parent
+ QGCFlickable {
+ clip: true
+ anchors.fill: parent
+ contentHeight: settingsColumn.height
+ contentWidth: settingsColumn.width
+ Column {
+ id: settingsColumn
+ width: _qgcView.width
+ spacing: ScreenTools.defaultFontPixelHeight * 0.5
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ //-----------------------------------------------------------------
+ //-- General
+ Item {
+ width: _panelWidth
+ height: generalLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.unitsSettings.visible
+ QGCLabel {
+ id: generalLabel
+ text: qsTr("General")
+ font.family: ScreenTools.demiboldFontFamily
+ }
+ }
+ Rectangle {
+ height: generalCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: _panelWidth
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ Column {
+ id: generalCol
+ spacing: ScreenTools.defaultFontPixelWidth
+ anchors.centerIn: parent
+ FactCheckBox {
+ text: qsTr("Enable AirMap Services")
+ fact: _enableAirMapFact
+ visible: _enableAirMapFact.visible
+ }
+ QGCCheckBox {
+ text: qsTr("Disable Telemetry")
+ checked: false
+ enabled: _airMapEnabled
+ onClicked:
+ {
+
+ }
+ }
+ }
+ }
+ //-----------------------------------------------------------------
+ //-- Login / Registration
+ Item {
+ width: _panelWidth
+ height: loginLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.appSettings.visible
+ QGCLabel {
+ id: loginLabel
+ text: qsTr("Login / Registration")
+ font.family: ScreenTools.demiboldFontFamily
+ }
+ }
+ Rectangle {
+ height: loginGrid.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: _panelWidth
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ GridLayout {
+ id: loginGrid
+ columns: 2
+ rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
+ anchors.centerIn: parent
+ QGCLabel { text: qsTr("Email:") }
+ QGCTextField {
+ width: _editFieldWidth
+ enabled: _airMapEnabled
+ }
+ QGCLabel { text: qsTr("Password:") }
+ QGCTextField {
+ width: _editFieldWidth
+ enabled: _airMapEnabled
+ }
+ Item {
+ width: 1
+ height: 1
+ Layout.columnSpan: 2
+ }
+ QGCLabel {
+ text: qsTr("Forgot Your AirMap Password?")
+ Layout.alignment: Qt.AlignHCenter
+ Layout.columnSpan: 2
+ }
+ Item {
+ width: 1
+ height: 1
+ Layout.columnSpan: 2
+ }
+ QGCButton {
+ text: qsTr("Register for an AirMap Account")
+ Layout.alignment: Qt.AlignHCenter
+ Layout.columnSpan: 2
+ enabled: _airMapEnabled
+ }
+ }
+ }
+ //-----------------------------------------------------------------
+ //-- Pilot Profile
+ Item {
+ width: _panelWidth
+ height: profileLabel.height
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: QGroundControl.settingsManager.appSettings.visible
+ QGCLabel {
+ id: profileLabel
+ text: qsTr("Pilot Profile")
+ font.family: ScreenTools.demiboldFontFamily
+ }
+ }
+ Rectangle {
+ height: profileGrid.height + (ScreenTools.defaultFontPixelHeight * 2)
+ width: _panelWidth
+ color: qgcPal.windowShade
+ anchors.margins: ScreenTools.defaultFontPixelWidth
+ anchors.horizontalCenter: parent.horizontalCenter
+ GridLayout {
+ id: profileGrid
+ columns: 2
+ columnSpacing: ScreenTools.defaultFontPixelHeight * 2
+ rowSpacing: ScreenTools.defaultFontPixelWidth * 0.25
+ anchors.centerIn: parent
+ QGCLabel { text: qsTr("Name:") }
+ QGCLabel { text: qsTr("John Doe") }
+ QGCLabel { text: qsTr("User Name:") }
+ QGCLabel { text: qsTr("joe36") }
+ QGCLabel { text: qsTr("Email:") }
+ QGCLabel { text: qsTr("jonh@doe.com") }
+ QGCLabel { text: qsTr("Phone:") }
+ QGCLabel { text: qsTr("+1 212 555 1212") }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml
index b83ad869f9459d2f70f07c661ce728258742767f..e51bed6927806339ef222dab525ecbcfbd0151dc 100644
--- a/src/FlightDisplay/FlightDisplayViewWidgets.qml
+++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml
@@ -34,6 +34,7 @@ Item {
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
property bool _isSatellite: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
property bool _lightWidgetBorders: _isSatellite
+ property bool _enableAirMap: QGroundControl.settingsManager.appSettings.enableAirMap.rawValue
readonly property real _margins: ScreenTools.defaultFontPixelHeight * 0.5
@@ -130,6 +131,7 @@ Item {
AirspaceControl {
id: airspaceControl
width: getPreferredInstrumentWidth()
+ visible: _enableAirMap
anchors.margins: ScreenTools.defaultFontPixelHeight * 0.5
onColapsedChanged: {
widgetRoot.showValues = colapsed
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index fc6c4d44127362b839ee9ece0499417fdc97e582..94ae533f469e0b316bd52dff889b20e349011063 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -46,18 +46,19 @@ QGCView {
readonly property var _defaultVehicleCoordinate: QtPositioning.coordinate(37.803784, -122.462276)
readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly
- property var _planMasterController: masterController
- property var _missionController: _planMasterController.missionController
- property var _geoFenceController: _planMasterController.geoFenceController
- property var _rallyPointController: _planMasterController.rallyPointController
- property var _visualItems: _missionController.visualItems
- property bool _lightWidgetBorders: editorMap.isSatelliteMap
- property bool _addWaypointOnClick: false
- property bool _addROIOnClick: false
- property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1
- property real _toolbarHeight: _qgcView.height - ScreenTools.availableHeight
- property int _editingLayer: _layerMission
- property int _toolStripBottom: toolStrip.height + toolStrip.y
+ property bool _enableAirMap: QGroundControl.settingsManager.appSettings.enableAirMap.rawValue
+ property var _planMasterController: masterController
+ property var _missionController: _planMasterController.missionController
+ property var _geoFenceController: _planMasterController.geoFenceController
+ property var _rallyPointController: _planMasterController.rallyPointController
+ property var _visualItems: _missionController.visualItems
+ property bool _lightWidgetBorders: editorMap.isSatelliteMap
+ property bool _addWaypointOnClick: false
+ property bool _addROIOnClick: false
+ property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1
+ property real _toolbarHeight: _qgcView.height - ScreenTools.availableHeight
+ property int _editingLayer: _layerMission
+ property int _toolStripBottom: toolStrip.height + toolStrip.y
readonly property int _layerMission: 1
readonly property int _layerGeoFence: 2
@@ -94,6 +95,12 @@ QGCView {
planMasterController: _planMasterController
}
+ on_EnableAirMapChanged: {
+ if(!_enableAirMap) {
+ planControlColapsed = false
+ }
+ }
+
Connections {
target: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
@@ -267,7 +274,7 @@ QGCView {
function accept() {
var toIndex = toCombo.currentIndex
- if (toIndex == 0) {
+ if (toIndex === 0) {
toIndex = 1
}
_missionController.moveMissionItem(_moveDialogMissionItemIndex, toIndex)
@@ -514,6 +521,7 @@ QGCView {
AirspaceControl {
id: airspaceControl
width: parent.width
+ visible: _enableAirMap
showColapse: false
onColapsedChanged: {
if(!airspaceControl.colasped) {
@@ -529,7 +537,7 @@ QGCView {
height: planControlColapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0
color: qgcPal.missionItemEditor
radius: _radius
- visible: planControlColapsed
+ visible: planControlColapsed && _enableAirMap
Row {
id: colapsedRow
spacing: ScreenTools.defaultFontPixelWidth
@@ -576,7 +584,7 @@ QGCView {
height: !planControlColapsed ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0
color: qgcPal.missionItemEditor
radius: _radius
- visible: !planControlColapsed
+ visible: !planControlColapsed || !_enableAirMap
Item {
height: expandedCol.height
anchors.left: parent.left
diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json
index 5b9bd15c2219da680b21cb0f958944e8f6670df7..00148e3fd35ca21f9051422a2243c48600f8843a 100644
--- a/src/Settings/App.SettingsGroup.json
+++ b/src/Settings/App.SettingsGroup.json
@@ -176,5 +176,12 @@
"shortDescription": "Default firmware type for flashing",
"type": "uint32",
"defaultValue": 12
+},
+{
+ "name": "EnableAirMap",
+ "shortDescription": "Enable AirMap",
+ "longDescription": "Enable AirMap Services",
+ "type": "bool",
+ "defaultValue": false
}
]
diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc
index 65068ef39ef40bd38d44838f2f86cffec647a62b..72a86037ec7c530d9e97e42fbd7474765a78b91d 100644
--- a/src/Settings/AppSettings.cc
+++ b/src/Settings/AppSettings.cc
@@ -36,6 +36,7 @@ const char* AppSettings::autoLoadMissionsName = "AutoLoa
const char* AppSettings::mapboxTokenName = "MapboxToken";
const char* AppSettings::esriTokenName = "EsriToken";
const char* AppSettings::defaultFirmwareTypeName = "DefaultFirmwareType";
+const char* AppSettings::enableAirMapName = "EnableAirMap";
const char* AppSettings::parameterFileExtension = "params";
const char* AppSettings::planFileExtension = "plan";
@@ -75,6 +76,7 @@ AppSettings::AppSettings(QObject* parent)
, _mapboxTokenFact(NULL)
, _esriTokenFact(NULL)
, _defaultFirmwareTypeFact(NULL)
+ , _enableAirMapFact(NULL)
{
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "AppSettings", "Reference only");
@@ -389,3 +391,12 @@ Fact* AppSettings::defaultFirmwareType(void)
return _defaultFirmwareTypeFact;
}
+
+Fact* AppSettings::enableAirMap(void)
+{
+ if (!_enableAirMapFact) {
+ _enableAirMapFact = _createSettingsFact(enableAirMapName);
+ }
+
+ return _enableAirMapFact;
+}
diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h
index 5b29ac37096b61e46ef5ca16e5b1b593edbf89e5..f97fb4b99b2b0ee97ea53d2eb27a7933b795e98c 100644
--- a/src/Settings/AppSettings.h
+++ b/src/Settings/AppSettings.h
@@ -40,6 +40,7 @@ public:
Q_PROPERTY(Fact* mapboxToken READ mapboxToken CONSTANT)
Q_PROPERTY(Fact* esriToken READ esriToken CONSTANT)
Q_PROPERTY(Fact* defaultFirmwareType READ defaultFirmwareType CONSTANT)
+ Q_PROPERTY(Fact* enableAirMap READ enableAirMap CONSTANT)
Q_PROPERTY(QString missionSavePath READ missionSavePath NOTIFY savePathsChanged)
Q_PROPERTY(QString parameterSavePath READ parameterSavePath NOTIFY savePathsChanged)
@@ -75,12 +76,13 @@ public:
Fact* mapboxToken (void);
Fact* esriToken (void);
Fact* defaultFirmwareType (void);
+ Fact* enableAirMap (void);
QString missionSavePath (void);
QString parameterSavePath (void);
QString telemetrySavePath (void);
QString logSavePath (void);
- QString videoSavePath (void);
+ QString videoSavePath (void);
static MAV_AUTOPILOT offlineEditingFirmwareTypeFromFirmwareType(MAV_AUTOPILOT firmwareType);
static MAV_TYPE offlineEditingVehicleTypeFromVehicleType(MAV_TYPE vehicleType);
@@ -107,6 +109,7 @@ public:
static const char* mapboxTokenName;
static const char* esriTokenName;
static const char* defaultFirmwareTypeName;
+ static const char* enableAirMapName;
// Application wide file extensions
static const char* parameterFileExtension;
@@ -154,6 +157,7 @@ private:
SettingsFact* _mapboxTokenFact;
SettingsFact* _esriTokenFact;
SettingsFact* _defaultFirmwareTypeFact;
+ SettingsFact* _enableAirMapFact;
};
#endif
diff --git a/src/api/QGCCorePlugin.cc b/src/api/QGCCorePlugin.cc
index 58b06834e82948323797611d4de59f72d147f161..a2e2519687249738ac2c95b340d3c7ec48d49863 100644
--- a/src/api/QGCCorePlugin.cc
+++ b/src/api/QGCCorePlugin.cc
@@ -30,6 +30,7 @@ public:
: pGeneral (NULL)
, pCommLinks (NULL)
, pOfflineMaps (NULL)
+ , pAirmap (NULL)
, pMAVLink (NULL)
, pConsole (NULL)
#if defined(QT_DEBUG)
@@ -53,6 +54,8 @@ public:
delete pCommLinks;
if(pOfflineMaps)
delete pOfflineMaps;
+ if(pAirmap)
+ delete pAirmap;
if(pMAVLink)
delete pMAVLink;
if(pConsole)
@@ -70,6 +73,7 @@ public:
QmlComponentInfo* pGeneral;
QmlComponentInfo* pCommLinks;
QmlComponentInfo* pOfflineMaps;
+ QmlComponentInfo* pAirmap;
QmlComponentInfo* pMAVLink;
QmlComponentInfo* pConsole;
#if defined(QT_DEBUG)
@@ -127,6 +131,10 @@ QVariantList &QGCCorePlugin::settingsPages()
QUrl::fromUserInput("qrc:/qml/OfflineMap.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
_p->settingsList.append(QVariant::fromValue((QmlComponentInfo*)_p->pOfflineMaps));
+ _p->pAirmap = new QmlComponentInfo(tr("AirMap"),
+ QUrl::fromUserInput("qrc:/qml/AirmapSettings.qml"),
+ QUrl::fromUserInput(""));
+ _p->settingsList.append(QVariant::fromValue((QmlComponentInfo*)_p->pAirmap));
_p->pMAVLink = new QmlComponentInfo(tr("MAVLink"),
QUrl::fromUserInput("qrc:/qml/MavlinkSettings.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));