Browse Source

Merge branch 'master' into pr-compid-2nd

QGC4.4
olliw42 6 years ago
parent
commit
225dee4dee
  1. 2
      libs/mavlink/include/mavlink/v2.0
  2. 7
      src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml
  3. 51
      src/FlightDisplay/FlightDisplayView.qml
  4. 2
      src/FlightDisplay/FlightDisplayViewWidgets.qml
  5. 5
      src/MissionManager/QGCMapPolygonVisuals.qml
  6. 5
      src/MissionManager/QGCMapPolylineVisuals.qml
  7. 42
      src/PlanView/MissionItemEditor.qml
  8. 9
      src/PlanView/PlanEditToolbar.qml
  9. 3
      src/ui/MainRootWindow.qml

2
libs/mavlink/include/mavlink/v2.0

@ -1 +1 @@
Subproject commit cd003f27415dcb7abd94867fd5c44cda2fc3bdf5 Subproject commit 6a160785b46f14c31ec014517324f25d606066ce

7
src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml

@ -982,6 +982,13 @@ Set -1 to disable the check</short_desc>
<decimal>2</decimal> <decimal>2</decimal>
<increment>0.5</increment> <increment>0.5</increment>
</parameter> </parameter>
<parameter default="5.0" name="COM_KILL_DISARM" type="FLOAT">
<short_desc>Timeout value for disarming when kill switch is engaged</short_desc>
<min>0.0</min>
<max>30.0</max>
<unit>s</unit>
<increment>0.1</increment>
</parameter>
<parameter default="0" name="COM_LOW_BAT_ACT" type="INT32"> <parameter default="0" name="COM_LOW_BAT_ACT" type="INT32">
<short_desc>Battery failsafe mode</short_desc> <short_desc>Battery failsafe mode</short_desc>
<long_desc>Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR for definition of battery states.</long_desc> <long_desc>Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR for definition of battery states.</long_desc>

51
src/FlightDisplay/FlightDisplayView.qml

@ -144,33 +144,31 @@ Item {
} }
} }
// The following code is used to track vehicle states such that we prompt to remove mission from vehicle when mission completes // The following code is used to track vehicle states for showing the mission complete dialog
property bool vehicleArmed: activeVehicle ? activeVehicle.armed : true // true here prevents pop up from showing during shutdown property bool vehicleArmed: activeVehicle ? activeVehicle.armed : true // true here prevents pop up from showing during shutdown
property bool vehicleWasArmed: false property bool vehicleWasArmed: false
property bool vehicleInMissionFlightMode: activeVehicle ? (activeVehicle.flightMode === activeVehicle.missionFlightMode) : false property bool vehicleInMissionFlightMode: activeVehicle ? (activeVehicle.flightMode === activeVehicle.missionFlightMode) : false
property bool promptForMissionRemove: false property bool vehicleWasInMissionFlightMode: false
property bool showMissionCompleteDialog: vehicleWasArmed && vehicleWasInMissionFlightMode &&
(_missionController.containsItems || _geoFenceController.containsItems || _rallyPointController.containsItems ||
(activeVehicle ? activeVehicle.cameraTriggerPoints.count !== 0 : false))
onVehicleArmedChanged: { onVehicleArmedChanged: {
if (vehicleArmed) { if (vehicleArmed) {
if (!promptForMissionRemove) {
promptForMissionRemove = vehicleInMissionFlightMode
vehicleWasArmed = true vehicleWasArmed = true
} vehicleWasInMissionFlightMode = vehicleInMissionFlightMode
} else { } else {
if (promptForMissionRemove && (_missionController.containsItems || _geoFenceController.containsItems || _rallyPointController.containsItems)) { if (showMissionCompleteDialog) {
// ArduPilot has a strange bug which prevents mission clear from working at certain times, so we can't show this dialog
if (!activeVehicle.apmFirmware) {
mainWindow.showComponentDialog(missionCompleteDialogComponent, qsTr("Flight Plan complete"), mainWindow.showDialogDefaultWidth, StandardButton.Close) mainWindow.showComponentDialog(missionCompleteDialogComponent, qsTr("Flight Plan complete"), mainWindow.showDialogDefaultWidth, StandardButton.Close)
} }
} vehicleWasArmed = false
promptForMissionRemove = false vehicleWasInMissionFlightMode = false
} }
} }
onVehicleInMissionFlightModeChanged: { onVehicleInMissionFlightModeChanged: {
if (!promptForMissionRemove && vehicleArmed) { if (vehicleInMissionFlightMode && vehicleArmed) {
promptForMissionRemove = true vehicleWasInMissionFlightMode = true
} }
} }
@ -193,11 +191,7 @@ Item {
anchors.margins: _margins anchors.margins: _margins
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
ColumnLayout {
Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelHeight spacing: ScreenTools.defaultFontPixelHeight
visible: !activeVehicle.connectionLost || !_guidedController.showResumeMission
QGCLabel { QGCLabel {
Layout.fillWidth: true Layout.fillWidth: true
@ -209,6 +203,7 @@ Item {
QGCButton { QGCButton {
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Remove plan from vehicle") text: qsTr("Remove plan from vehicle")
visible: !activeVehicle.connectionLost// && !activeVehicle.apmFirmware // ArduPilot has a bug somewhere with mission clear
onClicked: { onClicked: {
_planController.removeAllFromVehicle() _planController.removeAllFromVehicle()
hideDialog() hideDialog()
@ -228,11 +223,15 @@ Item {
height: 1 height: 1
} }
ColumnLayout {
Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelHeight
visible: !activeVehicle.connectionLost && _guidedController.showResumeMission
QGCButton { QGCButton {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
text: qsTr("Resume Mission From Waypoint %1").arg(_guidedController._resumeMissionIndex) text: qsTr("Resume Mission From Waypoint %1").arg(_guidedController._resumeMissionIndex)
visible: _guidedController.showResumeMission
onClicked: { onClicked: {
guidedController.executeAction(_guidedController.actionResumeMission, null, null) guidedController.executeAction(_guidedController.actionResumeMission, null, null)
@ -244,29 +243,15 @@ Item {
Layout.fillWidth: true Layout.fillWidth: true
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
text: qsTr("Resume Mission will rebuild the current mission from the last flown waypoint and upload it to the vehicle for the next flight.") text: qsTr("Resume Mission will rebuild the current mission from the last flown waypoint and upload it to the vehicle for the next flight.")
visible: _guidedController.showResumeMission
}
QGCLabel {
Layout.fillWidth: true
wrapMode: Text.WordWrap
color: qgcPal.warningText
text: qsTr("If you are changing batteries for Resume Mission do not disconnect from the vehicle when communication is lost.")
visible: _guidedController.showResumeMission
} }
} }
ColumnLayout {
Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelHeight
visible: activeVehicle.connectionLost && _guidedController.showResumeMission
QGCLabel { QGCLabel {
Layout.fillWidth: true Layout.fillWidth: true
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
color: qgcPal.warningText color: qgcPal.warningText
text: qsTr("If you are changing batteries for Resume Mission do not disconnect from the vehicle.") text: qsTr("If you are changing batteries for Resume Mission do not disconnect from the vehicle.")
} visible: _guidedController.showResumeMission
} }
} }
} }

2
src/FlightDisplay/FlightDisplayViewWidgets.qml

@ -134,7 +134,7 @@ Item {
spacing: ScreenTools.defaultFontPixelHeight spacing: ScreenTools.defaultFontPixelHeight
property bool noGPSLockVisible: activeVehicle && !activeVehicle.coordinate.isValid && mainIsMap property bool noGPSLockVisible: activeVehicle && !activeVehicle.coordinate.isValid && mainIsMap
property bool prearmErrorVisible: activeVehicle && activeVehicle.prearmError property bool prearmErrorVisible: activeVehicle && !activeVehicle.armed && activeVehicle.prearmError
QGCLabel { QGCLabel {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter

5
src/MissionManager/QGCMapPolygonVisuals.qml

@ -516,10 +516,11 @@ Item {
id: toolbarComponent id: toolbarComponent
PlanEditToolbar { PlanEditToolbar {
x: mapControl.centerViewport.left anchors.horizontalCenter: mapControl.left
anchors.horizontalCenterOffset: mapControl.centerViewport.left + (mapControl.centerViewport.width / 2)
y: mapControl.centerViewport.top y: mapControl.centerViewport.top
width: mapControl.centerViewport.width
z: QGroundControl.zOrderMapItems + 2 z: QGroundControl.zOrderMapItems + 2
availableWidth: mapControl.centerViewport.width
QGCButton { QGCButton {
_horizontalPadding: 0 _horizontalPadding: 0

5
src/MissionManager/QGCMapPolylineVisuals.qml

@ -314,10 +314,11 @@ Item {
id: toolbarComponent id: toolbarComponent
PlanEditToolbar { PlanEditToolbar {
x: mapControl.centerViewport.left anchors.horizontalCenter: mapControl.left
anchors.horizontalCenterOffset: mapControl.centerViewport.left + (mapControl.centerViewport.width / 2)
y: mapControl.centerViewport.top y: mapControl.centerViewport.top
width: mapControl.centerViewport.width
z: QGroundControl.zOrderMapItems + 2 z: QGroundControl.zOrderMapItems + 2
availableWidth: mapControl.centerViewport.width
QGCButton { QGCButton {
_horizontalPadding: 0 _horizontalPadding: 0

42
src/PlanView/MissionItemEditor.qml

@ -19,6 +19,8 @@ Rectangle {
color: _currentItem ? qgcPal.missionItemEditor : qgcPal.windowShade color: _currentItem ? qgcPal.missionItemEditor : qgcPal.windowShade
radius: _radius radius: _radius
opacity: _currentItem ? 1.0 : 0.7 opacity: _currentItem ? 1.0 : 0.7
border.width: _readyForSave ? 0 : 1
border.color: qgcPal.warningText
property var map ///< Map control property var map ///< Map control
property var masterController property var masterController
@ -38,6 +40,7 @@ Rectangle {
property bool _noMissionItemsAdded: ListView.view.model.count === 1 property bool _noMissionItemsAdded: ListView.view.model.count === 1
property real _sectionSpacer: ScreenTools.defaultFontPixelWidth / 2 // spacing between section headings property real _sectionSpacer: ScreenTools.defaultFontPixelWidth / 2 // spacing between section headings
property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1 property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1
property bool _readyForSave: missionItem.readyForSaveState === VisualMissionItem.ReadyForSave
readonly property real _editFieldWidth: Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12) readonly property real _editFieldWidth: Math.min(width - _margin * 2, ScreenTools.defaultFontPixelWidth * 12)
readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2
@ -73,27 +76,43 @@ Rectangle {
} }
Rectangle { Rectangle {
anchors.verticalCenter: commandPicker.verticalCenter id: notReadyForSaveIndicator
anchors.verticalCenter: notReadyForSaveLabel.visible ? notReadyForSaveLabel.verticalCenter : commandPicker.verticalCenter
anchors.leftMargin: _margin anchors.leftMargin: _margin
anchors.left: parent.left anchors.left: parent.left
width: readyForSaveLabel.contentHeight width: readyForSaveLabel.contentHeight
height: width height: width
border.width: 1 border.width: 1
border.color: "red" border.color: qgcPal.warningText
color: "white" color: "white"
radius: width / 2 radius: width / 2
visible: missionItem.readyForSaveState !== VisualMissionItem.ReadyForSave visible: !_readyForSave
QGCLabel { QGCLabel {
id: readyForSaveLabel id: readyForSaveLabel
anchors.centerIn: parent anchors.centerIn: parent
//: Indicator in Plan view to show mission item is not ready for save/send //: Indicator in Plan view to show mission item is not ready for save/send
text: qsTr("?") text: qsTr("?")
color: "red" color: qgcPal.warningText
font.pointSize: ScreenTools.smallFontPointSize font.pointSize: ScreenTools.smallFontPointSize
} }
} }
QGCLabel {
id: notReadyForSaveLabel
anchors.margins: _margin
anchors.left: notReadyForSaveIndicator.right
anchors.right: parent.right
anchors.top: commandPicker.bottom
visible: _currentItem && !_readyForSave
text: missionItem.readyForSaveState === VisualMissionItem.NotReadyForSaveTerrain ?
qsTr("Incomplete: Waiting on terrain data.") :
qsTr("Incomplete: Item not fully specified.")
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
color: qgcPal.warningText
}
QGCColoredImage { QGCColoredImage {
id: hamburger id: hamburger
anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.rightMargin: ScreenTools.defaultFontPixelWidth
@ -197,18 +216,10 @@ Rectangle {
QGCButton { QGCButton {
id: commandPicker id: commandPicker
anchors.topMargin: _margin / 2 anchors.topMargin: _margin
anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.leftMargin: _margin anchors.leftMargin: _margin
anchors.left: parent.left anchors.left: parent.left
/*
Trying no sequence numbers in ui
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
anchors.left: label.right
*/
anchors.top: parent.top anchors.top: parent.top
visible: !commandLabel.visible visible: !commandLabel.visible
text: missionItem.commandName text: missionItem.commandName
@ -237,10 +248,9 @@ Rectangle {
Loader { Loader {
id: editorLoader id: editorLoader
anchors.leftMargin: _margin anchors.margins: _margin
anchors.topMargin: _margin
anchors.left: parent.left anchors.left: parent.left
anchors.top: commandPicker.bottom anchors.top: _readyForSave ? commandPicker.bottom : notReadyForSaveLabel.bottom
source: missionItem.editorQml source: missionItem.editorQml
visible: _currentItem visible: _currentItem

9
src/PlanView/PlanEditToolbar.qml

@ -14,12 +14,16 @@ import QtQuick.Layouts 1.2
import QGroundControl 1.0 import QGroundControl 1.0
import QGroundControl.ScreenTools 1.0 import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
import QGroundControl.Palette 1.0
/// Toolbar used for things like Polygon editing tools /// Toolbar used for things like Polygon editing tools
Item { Item {
width: Math.min(toolsRowLayout.width + (_margins * 2), availableWidth)
height: toolsFlickable.y + toolsFlickable.height + _margins height: toolsFlickable.y + toolsFlickable.height + _margins
z: QGroundControl.zOrderMapItems + 2 z: QGroundControl.zOrderMapItems + 2
property real availableWidth
property real _radius: ScreenTools.defaultFontPixelWidth / 2 property real _radius: ScreenTools.defaultFontPixelWidth / 2
property real _margins: ScreenTools.defaultFontPixelWidth / 2 property real _margins: ScreenTools.defaultFontPixelWidth / 2
@ -39,8 +43,7 @@ Item {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
radius: _radius radius: _radius
color: "white" color: qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark
opacity: 0.75
} }
QGCFlickable { QGCFlickable {
@ -65,9 +68,7 @@ Item {
QGCLabel { QGCLabel {
id: instructionLabel id: instructionLabel
color: "black"
text: _instructionText text: _instructionText
Layout.fillWidth: true
} }
} }
} }

3
src/ui/MainRootWindow.qml

@ -153,6 +153,9 @@ ApplicationWindow {
mainWindowDialog.dialogButtons = buttons mainWindowDialog.dialogButtons = buttons
mainWindowDialog.open() mainWindowDialog.open()
if(buttons & StandardButton.Cancel || buttons & StandardButton.Close || buttons & StandardButton.Discard || buttons & StandardButton.Abort || buttons & StandardButton.Ignore) { if(buttons & StandardButton.Cancel || buttons & StandardButton.Close || buttons & StandardButton.Discard || buttons & StandardButton.Abort || buttons & StandardButton.Ignore) {
mainWindowDialog.closePolicy = Popup.NoAutoClose;
mainWindowDialog.interactive = false;
} else {
mainWindowDialog.closePolicy = Popup.CloseOnEscape | Popup.CloseOnPressOutside; mainWindowDialog.closePolicy = Popup.CloseOnEscape | Popup.CloseOnPressOutside;
mainWindowDialog.interactive = true; mainWindowDialog.interactive = true;
} }

Loading…
Cancel
Save