From e04a9d32bc9d510f2e7fde2d4fd4823307752515 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Tue, 4 Apr 2017 13:34:21 -0700 Subject: [PATCH] Pile of bug fixes --- qgroundcontrol.qrc | 1 - src/FirmwarePlugin/APM/MavCmdInfoCommon.json | 6 + .../APM/MavCmdInfoFixedWing.json | 6 - .../APM/MavCmdInfoMultiRotor.json | 8 +- src/FirmwarePlugin/PX4/MavCmdInfoCommon.json | 6 +- .../PX4/MavCmdInfoMultiRotor.json | 5 + .../FixedWingLandingComplexItem.cc | 4 + .../FixedWingLandingComplexItem.h | 1 + src/MissionManager/MissionController.cc | 10 ++ src/MissionManager/MissionController.h | 3 + src/MissionManager/MissionSettingsItem.cc | 2 +- src/MissionManager/MissionSettingsItem.h | 3 +- src/MissionManager/SimpleMissionItem.cc | 18 +++ src/MissionManager/SimpleMissionItem.h | 1 + src/MissionManager/SurveyMissionItem.cc | 5 + src/MissionManager/SurveyMissionItem.h | 1 + src/MissionManager/VisualMissionItem.h | 3 + src/PlanView/MissionSettingsMapVisual.qml | 132 ------------------ src/PlanView/PlanView.qml | 23 +++ src/QmlControls/QGCMouseArea.qml | 7 +- src/QmlControls/SliderSwitch.qml | 8 +- src/QmlControls/ToolStrip.qml | 4 +- 22 files changed, 101 insertions(+), 156 deletions(-) delete mode 100644 src/PlanView/MissionSettingsMapVisual.qml diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index a9593fff3..dceb50182 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 e1fad86ca..a022d3de8 100644 --- a/src/FirmwarePlugin/APM/MavCmdInfoCommon.json +++ b/src/FirmwarePlugin/APM/MavCmdInfoCommon.json @@ -9,6 +9,12 @@ "comment": "MAV_CMD_NAV_WAYPOINT", "paramRemove": "2" }, + { + "id": 22, + "comment": "MAV_CMD_NAV_TAKEOFF", + "specifiesCoordinate": false, + "specifiesAltitudeOnly": true + }, { "id": 84, "comment": "MAV_CMD_NAV_VTOL_TAKEOFF", diff --git a/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json b/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json index 4cfe9f9b6..6fa8db824 100644 --- a/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json +++ b/src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json @@ -14,12 +14,6 @@ "comment": "MAV_CMD_NAV_LAND", "paramRemove": "4" }, - { - "id": 22, - "comment": "MAV_CMD_NAV_TAKEOFF", - "specifiesCoordinate": false, - "specifiesAltitudeOnly": true - }, { "id": 82, "comment": "MAV_CMD_NAV_SPLINE_WAYPOINT", diff --git a/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json b/src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json index 294ffa7ef..4d47dac8d 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 258b5ff3b..68131978a 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 32a399445..a4dc8d0b6 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 99d7aac47..b5dcf4a84 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 ac20e2c42..4fabf994b 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 f8645323f..afa7e9a3b 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 62c24cca6..f170b7a17 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 4fcc9d851..d28adc121 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 d6d200b1b..b8f99189c 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 39e40a3b5..ed63b6046 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 528d78530..e97476acf 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 88337092d..268232c7c 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 19e02346e..98aeddb45 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 eac6ecc9a..76805227a 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 d3a150bd8..000000000 --- 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 1f01d417c..1acc34915 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 4c601f196..b58eb3498 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 101f6dd1d..2b5dd585b 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 5dc99c946..3e912e4d0 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 -- 2.22.0