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. 117
      src/FlightDisplay/FlightDisplayView.qml
  4. 2
      src/FlightDisplay/FlightDisplayViewWidgets.qml
  5. 9
      src/MissionManager/QGCMapPolygonVisuals.qml
  6. 9
      src/MissionManager/QGCMapPolylineVisuals.qml
  7. 52
      src/PlanView/MissionItemEditor.qml
  8. 17
      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>

117
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 vehicleWasInMissionFlightMode: false
property bool promptForMissionRemove: 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) { vehicleWasArmed = true
promptForMissionRemove = vehicleInMissionFlightMode vehicleWasInMissionFlightMode = vehicleInMissionFlightMode
vehicleWasArmed = true
}
} 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 mainWindow.showComponentDialog(missionCompleteDialogComponent, qsTr("Flight Plan complete"), mainWindow.showDialogDefaultWidth, StandardButton.Close)
if (!activeVehicle.apmFirmware) {
mainWindow.showComponentDialog(missionCompleteDialogComponent, qsTr("Flight Plan complete"), mainWindow.showDialogDefaultWidth, StandardButton.Close)
}
} }
promptForMissionRemove = false vehicleWasArmed = false
vehicleWasInMissionFlightMode = false
} }
} }
onVehicleInMissionFlightModeChanged: { onVehicleInMissionFlightModeChanged: {
if (!promptForMissionRemove && vehicleArmed) { if (vehicleInMissionFlightMode && vehicleArmed) {
promptForMissionRemove = true vehicleWasInMissionFlightMode = true
} }
} }
@ -193,46 +191,47 @@ Item {
anchors.margins: _margins anchors.margins: _margins
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
spacing: ScreenTools.defaultFontPixelHeight
ColumnLayout { QGCLabel {
Layout.fillWidth: true Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelHeight text: qsTr("%1 Images Taken").arg(activeVehicle.cameraTriggerPoints.count)
visible: !activeVehicle.connectionLost || !_guidedController.showResumeMission horizontalAlignment: Text.AlignHCenter
visible: activeVehicle.cameraTriggerPoints.count !== 0
}
QGCLabel { QGCButton {
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("%1 Images Taken").arg(activeVehicle.cameraTriggerPoints.count) text: qsTr("Remove plan from vehicle")
horizontalAlignment: Text.AlignHCenter visible: !activeVehicle.connectionLost// && !activeVehicle.apmFirmware // ArduPilot has a bug somewhere with mission clear
visible: activeVehicle.cameraTriggerPoints.count !== 0 onClicked: {
_planController.removeAllFromVehicle()
hideDialog()
} }
}
QGCButton { QGCButton {
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Remove plan from vehicle") Layout.alignment: Qt.AlignHCenter
onClicked: { text: qsTr("Leave plan on vehicle")
_planController.removeAllFromVehicle() onClicked: hideDialog()
hideDialog() }
}
}
QGCButton { Rectangle {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter color: qgcPal.text
text: qsTr("Leave plan on vehicle") height: 1
onClicked: hideDialog() }
}
Rectangle { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
color: qgcPal.text spacing: ScreenTools.defaultFontPixelHeight
height: 1 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 { QGCLabel {
Layout.fillWidth: true Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelHeight wrapMode: Text.WordWrap
visible: activeVehicle.connectionLost && _guidedController.showResumeMission color: qgcPal.warningText
text: qsTr("If you are changing batteries for Resume Mission do not disconnect from the vehicle.")
QGCLabel { visible: _guidedController.showResumeMission
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.")
}
} }
} }
} }

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

9
src/MissionManager/QGCMapPolygonVisuals.qml

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

9
src/MissionManager/QGCMapPolylineVisuals.qml

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

52
src/PlanView/MissionItemEditor.qml

@ -14,11 +14,13 @@ import QGroundControl.Palette 1.0
/// Mission item edit control /// Mission item edit control
Rectangle { Rectangle {
id: _root id: _root
height: editorLoader.visible ? (editorLoader.y + editorLoader.height + (_margin * 2)) : (commandPicker.y + commandPicker.height + _margin / 2) height: editorLoader.visible ? (editorLoader.y + editorLoader.height + (_margin * 2)) : (commandPicker.y + commandPicker.height + _margin / 2)
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

17
src/PlanView/PlanEditToolbar.qml

@ -14,14 +14,18 @@ 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 _radius: ScreenTools.defaultFontPixelWidth / 2 property real availableWidth
property real _margins: ScreenTools.defaultFontPixelWidth / 2
property real _radius: ScreenTools.defaultFontPixelWidth / 2
property real _margins: ScreenTools.defaultFontPixelWidth / 2
Component.onCompleted: { Component.onCompleted: {
// Move the child controls from consumer into the layout control // Move the child controls from consumer into the layout control
@ -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 {
@ -64,10 +67,8 @@ Item {
id: instructionComponent id: instructionComponent
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