diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index a9593ff..dceb501 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -66,7 +66,6 @@
src/QmlControls/MissionItemIndexLabel.qml
src/PlanView/MissionItemMapVisual.qml
src/PlanView/MissionItemStatus.qml
- src/PlanView/MissionSettingsMapVisual.qml
src/QmlControls/ModeSwitchDisplay.qml
src/QmlControls/MultiRotorMotorDisplay.qml
src/QmlControls/OfflineMapButton.qml
diff --git a/src/FirmwarePlugin/APM/MavCmdInfoCommon.json b/src/FirmwarePlugin/APM/MavCmdInfoCommon.json
index e1fad86..a022d3d 100644
--- a/src/FirmwarePlugin/APM/MavCmdInfoCommon.json
+++ b/src/FirmwarePlugin/APM/MavCmdInfoCommon.json
@@ -10,6 +10,12 @@
"paramRemove": "2"
},
{
+ "id": 22,
+ "comment": "MAV_CMD_NAV_TAKEOFF",
+ "specifiesCoordinate": false,
+ "specifiesAltitudeOnly": true
+ },
+ {
"id": 84,
"comment": "MAV_CMD_NAV_VTOL_TAKEOFF",
"specifiesCoordinate": true,
diff --git a/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json b/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json
index 4cfe9f9..6fa8db8 100644
--- a/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json
+++ b/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json
@@ -15,12 +15,6 @@
"paramRemove": "4"
},
{
- "id": 22,
- "comment": "MAV_CMD_NAV_TAKEOFF",
- "specifiesCoordinate": false,
- "specifiesAltitudeOnly": true
- },
- {
"id": 82,
"comment": "MAV_CMD_NAV_SPLINE_WAYPOINT",
"paramRemove": "1"
diff --git a/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json b/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json
index 294ffa7..4d47dac 100644
--- a/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json
+++ b/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json
@@ -30,11 +30,9 @@
"paramRemove": "1,4"
},
{
- "id": 22,
- "comment": "MAV_CMD_NAV_TAKEOFF",
- "specifiesCoordinate": false,
- "specifiesAltitudeOnly": true,
- "paramRemove": "1,2,3,4"
+ "id": 22,
+ "comment": "MAV_CMD_NAV_TAKEOFF",
+ "paramRemove": "1,2,3,4"
},
{
"id": 31,
diff --git a/src/FirmwarePlugin/PX4/MavCmdInfoCommon.json b/src/FirmwarePlugin/PX4/MavCmdInfoCommon.json
index 258b5ff..6813197 100644
--- a/src/FirmwarePlugin/PX4/MavCmdInfoCommon.json
+++ b/src/FirmwarePlugin/PX4/MavCmdInfoCommon.json
@@ -10,9 +10,9 @@
"paramRemove": "2,3,4"
},
{
- "id": 21,
- "comment": "MAV_CMD_NAV_LAND",
- "paramRemove": "1"
+ "id": 21,
+ "comment": "MAV_CMD_NAV_LAND",
+ "paramRemove": "1"
}
]
}
diff --git a/src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json b/src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json
index 32a39944..a4dc8d0 100644
--- a/src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json
+++ b/src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json
@@ -21,6 +21,11 @@
"comment": "MAV_CMD_NAV_LOITER_TIME",
"description": "Travel to a position and Loiter for an amount of time.",
"paramRemove": "3,4"
+ },
+ {
+ "id": 22,
+ "comment": "MAV_CMD_NAV_TAKEOFF",
+ "paramRemove": "1"
}
]
}
diff --git a/src/MissionManager/FixedWingLandingComplexItem.cc b/src/MissionManager/FixedWingLandingComplexItem.cc
index 99d7aac..b5dcf4a 100644
--- a/src/MissionManager/FixedWingLandingComplexItem.cc
+++ b/src/MissionManager/FixedWingLandingComplexItem.cc
@@ -521,3 +521,7 @@ void FixedWingLandingComplexItem::_setDirty(void)
setDirty(true);
}
+void FixedWingLandingComplexItem::applyNewAltitude(double newAltitude)
+{
+ _loiterAltitudeFact.setRawValue(newAltitude);
+}
diff --git a/src/MissionManager/FixedWingLandingComplexItem.h b/src/MissionManager/FixedWingLandingComplexItem.h
index ac20e2c..4fabf99 100644
--- a/src/MissionManager/FixedWingLandingComplexItem.h
+++ b/src/MissionManager/FixedWingLandingComplexItem.h
@@ -76,6 +76,7 @@ public:
double specifiedFlightSpeed (void) final { return std::numeric_limits::quiet_NaN(); }
double specifiedGimbalYaw (void) final { return std::numeric_limits::quiet_NaN(); }
void appendMissionItems (QList& items, QObject* missionItemParent) final;
+ void applyNewAltitude (double newAltitude) final;
bool coordinateHasRelativeAltitude (void) const final { return true; }
bool exitCoordinateHasRelativeAltitude (void) const final { return true; }
diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc
index f864532..afa7e9a 100644
--- a/src/MissionManager/MissionController.cc
+++ b/src/MissionManager/MissionController.cc
@@ -1597,3 +1597,13 @@ QGeoCoordinate MissionController::plannedHomePosition(void) const
return QGeoCoordinate();
}
}
+
+void MissionController::applyDefaultMissionAltitude(void)
+{
+ double defaultAltitude = _appSettings->defaultMissionItemAltitude()->rawValue().toDouble();
+
+ for (int i=1; i<_visualItems->count(); i++) {
+ VisualMissionItem* item = _visualItems->value(i);
+ item->applyNewAltitude(defaultAltitude);
+ }
+}
diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h
index 62c24cc..f170b7a 100644
--- a/src/MissionManager/MissionController.h
+++ b/src/MissionManager/MissionController.h
@@ -93,6 +93,9 @@ public:
Q_INVOKABLE void resumeMission(int resumeIndex);
+ /// Updates the altitudes of the items in the current mission to the new default altitude
+ Q_INVOKABLE void applyDefaultMissionAltitude(void);
+
/// Loads the mission items from the specified file
/// @param[in] vehicle Vehicle we are loading items for
/// @param[in] filename File to load from
diff --git a/src/MissionManager/MissionSettingsItem.cc b/src/MissionManager/MissionSettingsItem.cc
index 4fcc9d8..d28adc1 100644
--- a/src/MissionManager/MissionSettingsItem.cc
+++ b/src/MissionManager/MissionSettingsItem.cc
@@ -146,7 +146,7 @@ double MissionSettingsItem::greatestDistanceTo(const QGeoCoordinate &other) cons
bool MissionSettingsItem::specifiesCoordinate(void) const
{
- return false;
+ return true;
}
void MissionSettingsItem::appendMissionItems(QList& items, QObject* missionItemParent)
diff --git a/src/MissionManager/MissionSettingsItem.h b/src/MissionManager/MissionSettingsItem.h
index d6d200b..b8f9918 100644
--- a/src/MissionManager/MissionSettingsItem.h
+++ b/src/MissionManager/MissionSettingsItem.h
@@ -62,7 +62,7 @@ public:
int lastSequenceNumber (void) const final;
bool load (const QJsonObject& complexObject, int sequenceNumber, QString& errorString) final;
double greatestDistanceTo (const QGeoCoordinate &other) const final;
- QString mapVisualQML (void) const final { return QStringLiteral("MissionSettingsMapVisual.qml"); }
+ QString mapVisualQML (void) const final { return QStringLiteral("SimpleItemMapVisual.qml"); }
// Overrides from VisualMissionItem
@@ -80,6 +80,7 @@ public:
double specifiedFlightSpeed (void) final;
double specifiedGimbalYaw (void) final;
void appendMissionItems (QList& items, QObject* missionItemParent) final;
+ void applyNewAltitude (double newAltitude) final { Q_UNUSED(newAltitude); /* no action */ }
bool coordinateHasRelativeAltitude (void) const final { return true; }
bool exitCoordinateHasRelativeAltitude (void) const final { return true; }
diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc
index 39e40a3..ed63b60 100644
--- a/src/MissionManager/SimpleMissionItem.cc
+++ b/src/MissionManager/SimpleMissionItem.cc
@@ -728,3 +728,21 @@ void SimpleMissionItem::appendMissionItems(QList& items, QObject*
_cameraSection->appendMissionItems(items, missionItemParent, seqNum);
}
+
+void SimpleMissionItem::applyNewAltitude(double newAltitude)
+{
+ MAV_CMD command = (MAV_CMD)this->command();
+ const MissionCommandUIInfo* uiInfo = _commandTree->getUIInfo(_vehicle, command);
+
+ if (uiInfo->specifiesCoordinate() || uiInfo->specifiesAltitudeOnly()) {
+ switch ((MAV_CMD)this->command()) {
+ case MAV_CMD_NAV_LAND:
+ case MAV_CMD_NAV_VTOL_LAND:
+ // Leave alone
+ break;
+ default:
+ _missionItem.setParam7(newAltitude);
+ break;
+ }
+ }
+}
diff --git a/src/MissionManager/SimpleMissionItem.h b/src/MissionManager/SimpleMissionItem.h
index 528d785..e97476a 100644
--- a/src/MissionManager/SimpleMissionItem.h
+++ b/src/MissionManager/SimpleMissionItem.h
@@ -99,6 +99,7 @@ public:
double specifiedGimbalYaw (void) final;
QString mapVisualQML (void) const final { return QStringLiteral("SimpleItemMapVisual.qml"); }
void appendMissionItems (QList& items, QObject* missionItemParent) final;
+ void applyNewAltitude (double newAltitude) final;
bool coordinateHasRelativeAltitude (void) const final { return _missionItem.relativeAltitude(); }
bool exitCoordinateHasRelativeAltitude (void) const final { return coordinateHasRelativeAltitude(); }
diff --git a/src/MissionManager/SurveyMissionItem.cc b/src/MissionManager/SurveyMissionItem.cc
index 8833709..268232c 100644
--- a/src/MissionManager/SurveyMissionItem.cc
+++ b/src/MissionManager/SurveyMissionItem.cc
@@ -1108,3 +1108,8 @@ double SurveyMissionItem::_turnaroundDistance(void) const
{
return _turnaroundDistFact.rawValue().toDouble();
}
+
+void SurveyMissionItem::applyNewAltitude(double newAltitude)
+{
+ _gridAltitudeFact.setRawValue(newAltitude);
+}
diff --git a/src/MissionManager/SurveyMissionItem.h b/src/MissionManager/SurveyMissionItem.h
index 19e0234..98aeddb 100644
--- a/src/MissionManager/SurveyMissionItem.h
+++ b/src/MissionManager/SurveyMissionItem.h
@@ -126,6 +126,7 @@ public:
double specifiedGimbalYaw (void) final { return std::numeric_limits::quiet_NaN(); }
void appendMissionItems (QList& items, QObject* missionItemParent) final;
void setMissionFlightStatus (MissionController::MissionFlightStatus_t& missionFlightStatus) final;
+ void applyNewAltitude (double newAltitude) final;
bool coordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelativeFact.rawValue().toBool(); }
bool exitCoordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelativeFact.rawValue().toBool(); }
diff --git a/src/MissionManager/VisualMissionItem.h b/src/MissionManager/VisualMissionItem.h
index eac6ecc..7680522 100644
--- a/src/MissionManager/VisualMissionItem.h
+++ b/src/MissionManager/VisualMissionItem.h
@@ -138,6 +138,9 @@ public:
/// @param missionItemParent Parent object for newly created MissionItems
virtual void appendMissionItems(QList& items, QObject* missionItemParent) = 0;
+ /// Adjust the altitude of the item if appropriate to the new altitude.
+ virtual void applyNewAltitude(double newAltitude) = 0;
+
double missionGimbalYaw (void) const { return _missionGimbalYaw; }
double missionVehicleYaw (void) const { return _missionVehicleYaw; }
bool showMissionGimbalYaw(void) const { return !qIsNaN(_missionGimbalYaw); }
diff --git a/src/PlanView/MissionSettingsMapVisual.qml b/src/PlanView/MissionSettingsMapVisual.qml
deleted file mode 100644
index d3a150b..0000000
--- a/src/PlanView/MissionSettingsMapVisual.qml
+++ /dev/null
@@ -1,132 +0,0 @@
-/****************************************************************************
- *
- * (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 QtLocation 5.3
-import QtPositioning 5.3
-
-import QGroundControl 1.0
-import QGroundControl.ScreenTools 1.0
-import QGroundControl.Palette 1.0
-import QGroundControl.Controls 1.0
-import QGroundControl.FlightMap 1.0
-
-/// Mission Settings map visuals
-Item {
- id: _root
-
- property var map ///< Map control to place item in
-
- signal clicked(int sequenceNumber)
-
- property var _missionItem: object
- property var _itemVisual
- property var _dragArea
- property bool _itemVisualShowing: false
- property bool _dragAreaShowing: false
-
- function hideItemVisuals() {
- if (_itemVisualShowing) {
- _itemVisual.destroy()
- _itemVisualShowing = false
- }
- }
-
- function showItemVisuals() {
- if (!_itemVisualShowing) {
- _itemVisual = indicatorComponent.createObject(map)
- map.addMapItem(_itemVisual)
- _itemVisualShowing = true
- }
- }
-
- function hideDragArea() {
- if (_dragAreaShowing) {
- _dragArea.destroy()
- _dragAreaShowing = false
- }
- }
-
- function showDragArea() {
- if (!_dragAreaShowing && _missionItem.specifiesCoordinate) {
- _dragArea = dragAreaComponent.createObject(map)
- _dragAreaShowing = true
- }
- }
-
- Component.onCompleted: {
- showItemVisuals()
- if (_missionItem.isCurrentItem) {
- showDragArea()
- }
- }
-
- Component.onDestruction: {
- hideDragArea()
- hideItemVisuals()
- }
-
-
- Connections {
- target: _missionItem
-
- onIsCurrentItemChanged: {
- if (_missionItem.isCurrentItem) {
- showDragArea()
- } else {
- hideDragArea()
- }
- }
- }
-
- // Control which is used to drag items
- Component {
- id: dragAreaComponent
-
- MissionItemIndicatorDrag {
- itemIndicator: _itemVisual
- itemCoordinate: _missionItem.coordinate
-
- onItemCoordinateChanged: _missionItem.coordinate = itemCoordinate
- }
- }
-
- Component {
- id: indicatorComponent
-
- MissionItemIndicator {
- coordinate: _missionItem.coordinate
- visible: coordinate.isValid
- z: QGroundControl.zOrderMapItems
- missionItem: _missionItem
-
- onClicked: _root.clicked(_missionItem.sequenceNumber)
-
- // These are the non-coordinate child mission items attached to this item
- Row {
- anchors.top: parent.top
- anchors.left: parent.right
-
- Repeater {
- model: _missionItem.childItems
-
- delegate: MissionItemIndexLabel {
- label: object.abbreviation.length === 0 ? object.sequenceNumber : object.abbreviation.charAt(0)
- checked: object.isCurrentItem
- z: 2
- specifiesCoordinate: false
-
- onClicked: _root.Clicked(object.sequenceNumber)
- }
- }
- }
- }
- }
-}
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index 1f01d41..1acc349 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -95,6 +95,29 @@ QGCView {
mapRallyPointController: rallyPointController
}
+ Connections {
+ target: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
+
+ onRawValueChanged: {
+ if (_visualItems.count > 1) {
+ _qgcView.showDialog(applyNewAltitude, qsTr("Apply new alititude"), showDialogDefaultWidth, StandardButton.Yes | StandardButton.No)
+ }
+ }
+ }
+
+ Component {
+ id: applyNewAltitude
+
+ QGCViewMessage {
+ message: qsTr("You have changed the default altitude for mission items. Would you like to apply that altitude to all the items in the current mission?")
+
+ function accept() {
+ hideDialog()
+ missionController.applyDefaultMissionAltitude()
+ }
+ }
+ }
+
MissionController {
id: missionController
diff --git a/src/QmlControls/QGCMouseArea.qml b/src/QmlControls/QGCMouseArea.qml
index 4c601f1..b58eb34 100644
--- a/src/QmlControls/QGCMouseArea.qml
+++ b/src/QmlControls/QGCMouseArea.qml
@@ -13,14 +13,15 @@ MouseArea {
anchors.bottomMargin: fillItem ? -_touchMarginVertical : 0
anchors.fill: fillItem ? fillItem : undefined
- property var fillItem
+ property var fillItem
+ property bool debugMobile: false ///< Allows you to debug mobile sizing on desktop builds
property real _itemWidth: fillItem ? fillItem.width : width
property real _itemHeight: fillItem ? fillItem.height : height
property real _touchWidth: Math.max(_itemWidth, ScreenTools.minTouchPixels)
property real _touchHeight: Math.max(_itemHeight, ScreenTools.minTouchPixels)
- property real _touchMarginHorizontal: ScreenTools.isMobile ? (_touchWidth - _itemWidth) / 2 : 0
- property real _touchMarginVertical: ScreenTools.isMobile ? (_touchHeight - _itemHeight) / 2 : 0
+ property real _touchMarginHorizontal: debugMobile || ScreenTools.isMobile ? (_touchWidth - _itemWidth) / 2 : 0
+ property real _touchMarginVertical: debugMobile || ScreenTools.isMobile ? (_touchHeight - _itemHeight) / 2 : 0
Rectangle {
anchors.fill: parent
diff --git a/src/QmlControls/SliderSwitch.qml b/src/QmlControls/SliderSwitch.qml
index 101f6dd..2b5dd58 100644
--- a/src/QmlControls/SliderSwitch.qml
+++ b/src/QmlControls/SliderSwitch.qml
@@ -9,7 +9,7 @@ import QGroundControl.Palette 1.0
Rectangle {
id: _root
implicitWidth: label.contentWidth + (_diameter * 2.5) + (_border * 4)
- implicitHeight: Math.max(ScreenTools.isMobile ? ScreenTools.minTouchPixels : 0, label.height * 2.5)
+ implicitHeight: label.height * 2.5
radius: height /2
color: qgcPal.text
@@ -57,10 +57,10 @@ Rectangle {
}
- MouseArea {
+ QGCMouseArea {
id: sliderDragArea
anchors.leftMargin: -ScreenTools.defaultFontPixelWidth * 15
- anchors.fill: slider
+ fillItem: slider
drag.target: slider
drag.axis: Drag.XAxis
drag.minimumX: _border
@@ -71,6 +71,8 @@ Rectangle {
property bool dragActive: drag.active
property real _dragOffset: 1
+ Component.onCompleted: console.log(height, ScreenTools.minTouchPixels)
+
onPressed: {
mouse.x
}
diff --git a/src/QmlControls/ToolStrip.qml b/src/QmlControls/ToolStrip.qml
index 5dc99c9..3e912e4 100644
--- a/src/QmlControls/ToolStrip.qml
+++ b/src/QmlControls/ToolStrip.qml
@@ -43,7 +43,9 @@ Rectangle {
Component.onCompleted: recalcShowOptionalElements()
- onMaxHeightChanged: recalcShowOptionalElements()
+ onMaxHeightChanged: recalcShowOptionalElements()
+ onModelChanged: recalcShowOptionalElements()
+ onButtonVisibleChanged: recalcShowOptionalElements()
Connections {
target: ScreenTools