Browse Source

Pile of bug fixes

QGC4.4
DonLakeFlyer 8 years ago
parent
commit
e04a9d32bc
  1. 1
      qgroundcontrol.qrc
  2. 6
      src/FirmwarePlugin/APM/MavCmdInfoCommon.json
  3. 6
      src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json
  4. 2
      src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json
  5. 5
      src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json
  6. 4
      src/MissionManager/FixedWingLandingComplexItem.cc
  7. 1
      src/MissionManager/FixedWingLandingComplexItem.h
  8. 10
      src/MissionManager/MissionController.cc
  9. 3
      src/MissionManager/MissionController.h
  10. 2
      src/MissionManager/MissionSettingsItem.cc
  11. 3
      src/MissionManager/MissionSettingsItem.h
  12. 18
      src/MissionManager/SimpleMissionItem.cc
  13. 1
      src/MissionManager/SimpleMissionItem.h
  14. 5
      src/MissionManager/SurveyMissionItem.cc
  15. 1
      src/MissionManager/SurveyMissionItem.h
  16. 3
      src/MissionManager/VisualMissionItem.h
  17. 132
      src/PlanView/MissionSettingsMapVisual.qml
  18. 23
      src/PlanView/PlanView.qml
  19. 5
      src/QmlControls/QGCMouseArea.qml
  20. 8
      src/QmlControls/SliderSwitch.qml
  21. 2
      src/QmlControls/ToolStrip.qml

1
qgroundcontrol.qrc

@ -66,7 +66,6 @@ @@ -66,7 +66,6 @@
<file alias="QGroundControl/Controls/MissionItemIndexLabel.qml">src/QmlControls/MissionItemIndexLabel.qml</file>
<file alias="QGroundControl/Controls/MissionItemMapVisual.qml">src/PlanView/MissionItemMapVisual.qml</file>
<file alias="QGroundControl/Controls/MissionItemStatus.qml">src/PlanView/MissionItemStatus.qml</file>
<file alias="QGroundControl/Controls/MissionSettingsMapVisual.qml">src/PlanView/MissionSettingsMapVisual.qml</file>
<file alias="QGroundControl/Controls/ModeSwitchDisplay.qml">src/QmlControls/ModeSwitchDisplay.qml</file>
<file alias="QGroundControl/Controls/MultiRotorMotorDisplay.qml">src/QmlControls/MultiRotorMotorDisplay.qml</file>
<file alias="QGroundControl/Controls/OfflineMapButton.qml">src/QmlControls/OfflineMapButton.qml</file>

6
src/FirmwarePlugin/APM/MavCmdInfoCommon.json

@ -10,6 +10,12 @@ @@ -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,

6
src/FirmwarePlugin/APM/MavCmdInfoFixedWing.json

@ -15,12 +15,6 @@ @@ -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"

2
src/FirmwarePlugin/APM/MavCmdInfoMultiRotor.json

@ -32,8 +32,6 @@ @@ -32,8 +32,6 @@
{
"id": 22,
"comment": "MAV_CMD_NAV_TAKEOFF",
"specifiesCoordinate": false,
"specifiesAltitudeOnly": true,
"paramRemove": "1,2,3,4"
},
{

5
src/FirmwarePlugin/PX4/MavCmdInfoMultiRotor.json

@ -21,6 +21,11 @@ @@ -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"
}
]
}

4
src/MissionManager/FixedWingLandingComplexItem.cc

@ -521,3 +521,7 @@ void FixedWingLandingComplexItem::_setDirty(void) @@ -521,3 +521,7 @@ void FixedWingLandingComplexItem::_setDirty(void)
setDirty(true);
}
void FixedWingLandingComplexItem::applyNewAltitude(double newAltitude)
{
_loiterAltitudeFact.setRawValue(newAltitude);
}

1
src/MissionManager/FixedWingLandingComplexItem.h

@ -76,6 +76,7 @@ public: @@ -76,6 +76,7 @@ public:
double specifiedFlightSpeed (void) final { return std::numeric_limits<double>::quiet_NaN(); }
double specifiedGimbalYaw (void) final { return std::numeric_limits<double>::quiet_NaN(); }
void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
void applyNewAltitude (double newAltitude) final;
bool coordinateHasRelativeAltitude (void) const final { return true; }
bool exitCoordinateHasRelativeAltitude (void) const final { return true; }

10
src/MissionManager/MissionController.cc

@ -1597,3 +1597,13 @@ QGeoCoordinate MissionController::plannedHomePosition(void) const @@ -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<VisualMissionItem*>(i);
item->applyNewAltitude(defaultAltitude);
}
}

3
src/MissionManager/MissionController.h

@ -93,6 +93,9 @@ public: @@ -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

2
src/MissionManager/MissionSettingsItem.cc

@ -146,7 +146,7 @@ double MissionSettingsItem::greatestDistanceTo(const QGeoCoordinate &other) cons @@ -146,7 +146,7 @@ double MissionSettingsItem::greatestDistanceTo(const QGeoCoordinate &other) cons
bool MissionSettingsItem::specifiesCoordinate(void) const
{
return false;
return true;
}
void MissionSettingsItem::appendMissionItems(QList<MissionItem*>& items, QObject* missionItemParent)

3
src/MissionManager/MissionSettingsItem.h

@ -62,7 +62,7 @@ public: @@ -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: @@ -80,6 +80,7 @@ public:
double specifiedFlightSpeed (void) final;
double specifiedGimbalYaw (void) final;
void appendMissionItems (QList<MissionItem*>& 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; }

18
src/MissionManager/SimpleMissionItem.cc

@ -728,3 +728,21 @@ void SimpleMissionItem::appendMissionItems(QList<MissionItem*>& items, QObject* @@ -728,3 +728,21 @@ void SimpleMissionItem::appendMissionItems(QList<MissionItem*>& 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;
}
}
}

1
src/MissionManager/SimpleMissionItem.h

@ -99,6 +99,7 @@ public: @@ -99,6 +99,7 @@ public:
double specifiedGimbalYaw (void) final;
QString mapVisualQML (void) const final { return QStringLiteral("SimpleItemMapVisual.qml"); }
void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
void applyNewAltitude (double newAltitude) final;
bool coordinateHasRelativeAltitude (void) const final { return _missionItem.relativeAltitude(); }
bool exitCoordinateHasRelativeAltitude (void) const final { return coordinateHasRelativeAltitude(); }

5
src/MissionManager/SurveyMissionItem.cc

@ -1108,3 +1108,8 @@ double SurveyMissionItem::_turnaroundDistance(void) const @@ -1108,3 +1108,8 @@ double SurveyMissionItem::_turnaroundDistance(void) const
{
return _turnaroundDistFact.rawValue().toDouble();
}
void SurveyMissionItem::applyNewAltitude(double newAltitude)
{
_gridAltitudeFact.setRawValue(newAltitude);
}

1
src/MissionManager/SurveyMissionItem.h

@ -126,6 +126,7 @@ public: @@ -126,6 +126,7 @@ public:
double specifiedGimbalYaw (void) final { return std::numeric_limits<double>::quiet_NaN(); }
void appendMissionItems (QList<MissionItem*>& 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(); }

3
src/MissionManager/VisualMissionItem.h

@ -138,6 +138,9 @@ public: @@ -138,6 +138,9 @@ public:
/// @param missionItemParent Parent object for newly created MissionItems
virtual void appendMissionItems(QList<MissionItem*>& 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); }

132
src/PlanView/MissionSettingsMapVisual.qml

@ -1,132 +0,0 @@ @@ -1,132 +0,0 @@
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* 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)
}
}
}
}
}
}

23
src/PlanView/PlanView.qml

@ -95,6 +95,29 @@ QGCView { @@ -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

5
src/QmlControls/QGCMouseArea.qml

@ -14,13 +14,14 @@ MouseArea { @@ -14,13 +14,14 @@ MouseArea {
anchors.fill: fillItem ? fillItem : undefined
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

8
src/QmlControls/SliderSwitch.qml

@ -9,7 +9,7 @@ import QGroundControl.Palette 1.0 @@ -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 { @@ -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 { @@ -71,6 +71,8 @@ Rectangle {
property bool dragActive: drag.active
property real _dragOffset: 1
Component.onCompleted: console.log(height, ScreenTools.minTouchPixels)
onPressed: {
mouse.x
}

2
src/QmlControls/ToolStrip.qml

@ -44,6 +44,8 @@ Rectangle { @@ -44,6 +44,8 @@ Rectangle {
Component.onCompleted: recalcShowOptionalElements()
onMaxHeightChanged: recalcShowOptionalElements()
onModelChanged: recalcShowOptionalElements()
onButtonVisibleChanged: recalcShowOptionalElements()
Connections {
target: ScreenTools

Loading…
Cancel
Save