地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
9.0 KiB

/****************************************************************************
*
* (c) 2009-2019 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.
*
* @file
* @author Gus Grubba <gus@auterion.com>
*/
import QtQuick 2.11
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.11
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.MultiVehicleManager 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
//-------------------------------------------------------------------------
//-- Battery Indicator
Item {
id: _root
width: batteryIndicatorRow.width
anchors.top: parent.top
anchors.bottom: parent.bottom
property var battery1: activeVehicle ? activeVehicle.battery : null
property var battery2: activeVehicle ? activeVehicle.battery2 : null
property bool hasSecondBattery: battery2 && battery2.voltage.value !== -1
function lowestBattery() {
if(activeVehicle) {
if(hasSecondBattery) {
if(activeVehicle.battery2.percentRemaining.value < activeVehicle.battery.percentRemaining.value) {
return activeVehicle.battery2
}
}
return activeVehicle.battery
}
return null
}
function getBatteryColor(battery) {
if(battery) {
if(battery.percentRemaining.value > 75) {
return qgcPal.text
}
if(battery.percentRemaining.value > 50) {
return qgcPal.colorOrange
}
if(battery.percentRemaining.value > 0.1) {
return qgcPal.colorRed
}
}
return qgcPal.colorGrey
}
function getBatteryPercentageText(battery) {
if(battery) {
if(battery.percentRemaining.value > 98.9) {
return "100%"
}
if(battery.percentRemaining.value > 0.1) {
return battery.percentRemaining.valueString + battery.percentRemaining.units
}
if(battery.voltage.value >= 0) {
return battery.voltage.valueString + battery.voltage.units
}
}
return "N/A"
}
Component {
id: batteryInfo
Rectangle {
width: battCol.width + ScreenTools.defaultFontPixelWidth * 3
height: battCol.height + ScreenTools.defaultFontPixelHeight * 2
radius: ScreenTools.defaultFontPixelHeight * 0.5
color: qgcPal.window
Column {
id: battCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
width: Math.max(battGrid.width, battLabel.width)
anchors.margins: ScreenTools.defaultFontPixelHeight
anchors.centerIn: parent
QGCLabel {
id: battLabel
text: qsTr("Battery Status")
font.family: ScreenTools.demiboldFontFamily
anchors.horizontalCenter: parent.horizontalCenter
}
GridLayout {
id: battGrid
anchors.margins: ScreenTools.defaultFontPixelHeight
columnSpacing: ScreenTools.defaultFontPixelWidth
columns: 2
anchors.horizontalCenter: parent.horizontalCenter
QGCLabel {
id: batteryLabel
text: qsTr("Battery 1")
Layout.alignment: Qt.AlignVCenter
}
QGCColoredImage {
height: batteryLabel.height
width: height
sourceSize.width: width
source: "/qmlimages/Battery.svg"
color: qgcPal.text
fillMode: Image.PreserveAspectFit
Rectangle {
color: getBatteryColor(activeVehicle ? activeVehicle.battery : null)
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.125
height: parent.height * 0.35
width: activeVehicle ? (activeVehicle.battery.percentRemaining.value / 100) * parent.width * 0.875 : 0
anchors.verticalCenter: parent.verticalCenter
}
}
QGCLabel { text: qsTr("Voltage:") }
QGCLabel { text: (battery1 && battery1.voltage.value !== -1) ? (battery1.voltage.valueString + " " + battery1.voltage.units) : "N/A" }
QGCLabel { text: qsTr("Accumulated Consumption:") }
QGCLabel { text: (battery1 && battery1.mahConsumed.value !== -1) ? (battery1.mahConsumed.valueString + " " + battery1.mahConsumed.units) : "N/A" }
Item {
width: 1
height: 1
visible: hasSecondBattery;
Layout.columnSpan: 2
}
QGCLabel {
text: qsTr("Battery 2")
visible: hasSecondBattery
Layout.alignment: Qt.AlignVCenter
}
QGCColoredImage {
height: batteryLabel.height
width: height
sourceSize.width: width
source: "/qmlimages/Battery.svg"
color: qgcPal.text
visible: hasSecondBattery
fillMode: Image.PreserveAspectFit
Rectangle {
color: getBatteryColor(activeVehicle ? activeVehicle.battery2 : null)
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.125
height: parent.height * 0.35
width: activeVehicle ? (activeVehicle.battery2.percentRemaining.value / 100) * parent.width * 0.875 : 0
anchors.verticalCenter: parent.verticalCenter
}
}
QGCLabel { text: qsTr("Voltage:"); visible: hasSecondBattery; }
QGCLabel { text: (battery2 && battery2.voltage.value !== -1) ? (battery2.voltage.valueString + " " + battery2.voltage.units) : "N/A"; visible: hasSecondBattery; }
QGCLabel { text: qsTr("Accumulated Consumption:"); visible: hasSecondBattery; }
QGCLabel { text: (battery2 && battery2.mahConsumed.value !== -1) ? (battery2.mahConsumed.valueString + " " + battery2.mahConsumed.units) : "N/A"; visible: hasSecondBattery; }
}
}
}
}
Row {
id: batteryIndicatorRow
anchors.top: parent.top
anchors.bottom: parent.bottom
opacity: (activeVehicle && activeVehicle.battery.voltage.value >= 0) ? 1 : 0.5
spacing: ScreenTools.defaultFontPixelWidth
QGCColoredImage {
anchors.top: parent.top
anchors.bottom: parent.bottom
width: height
sourceSize.width: width
source: "/qmlimages/Battery.svg"
color: qgcPal.text
fillMode: Image.PreserveAspectFit
Rectangle {
color: getBatteryColor(lowestBattery())
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.25
height: parent.height * 0.35
width: activeVehicle ? (activeVehicle.battery.percentRemaining.value / 100) * parent.width * 0.75 : 0
anchors.verticalCenter: parent.verticalCenter
}
}
QGCLabel {
text: getBatteryPercentageText(lowestBattery())
font.pointSize: ScreenTools.smallFontPointSize
color: getBatteryColor(lowestBattery())
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea {
anchors.fill: parent
onClicked: {
mainWindow.showPopUp(_root, batteryInfo)
}
}
}