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.
297 lines
11 KiB
297 lines
11 KiB
/*===================================================================== |
|
|
|
QGroundControl Open Source Ground Control Station |
|
|
|
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
|
|
|
This file is part of the QGROUNDCONTROL project |
|
|
|
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
QGROUNDCONTROL is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
======================================================================*/ |
|
|
|
/// @file |
|
/// @brief Battery, propeller and magnetometer settings |
|
/// @author Gus Grubba <mavlink@grubba.com> |
|
|
|
import QtQuick 2.2 |
|
import QtQuick.Controls 1.2 |
|
import QtQuick.Controls.Styles 1.2 |
|
|
|
import QGroundControl.FactSystem 1.0 |
|
import QGroundControl.FactControls 1.0 |
|
import QGroundControl.Palette 1.0 |
|
import QGroundControl.Controls 1.0 |
|
import QGroundControl.ScreenTools 1.0 |
|
|
|
Rectangle { |
|
QGCPalette { id: palette; colorGroupEnabled: true } |
|
|
|
id: powerSettings |
|
width: 600 |
|
height: 600 |
|
color: palette.window |
|
|
|
property int firstColumnWidth: 220 |
|
property int textEditWidth: 80 |
|
property ScreenTools screenTools: ScreenTools { } |
|
|
|
property Fact battNumCells: Fact { name: "BAT_N_CELLS" } |
|
property Fact battHighVolt: Fact { name: "BAT_V_CHARGED" } |
|
property Fact battLowVolt: Fact { name: "BAT_V_EMPTY" } |
|
|
|
property alias battHigh: battHighRow |
|
property alias battLow: battLowRow |
|
|
|
function getBatteryImage() |
|
{ |
|
switch(battNumCells.value) { |
|
case 1: return "/qml/PowerComponentBattery_01cell.svg"; |
|
case 2: return "/qml/PowerComponentBattery_02cell.svg" |
|
case 3: return "/qml/PowerComponentBattery_03cell.svg" |
|
case 4: return "/qml/PowerComponentBattery_04cell.svg" |
|
case 5: return "/qml/PowerComponentBattery_05cell.svg" |
|
case 6: return "/qml/PowerComponentBattery_06cell.svg" |
|
default: return "/qml/PowerComponentBattery_01cell.svg"; |
|
} |
|
} |
|
|
|
function drawArrowhead(ctx, x, y, radians) |
|
{ |
|
ctx.save(); |
|
ctx.beginPath(); |
|
ctx.translate(x,y); |
|
ctx.rotate(radians); |
|
ctx.moveTo(0,0); |
|
ctx.lineTo(5,10); |
|
ctx.lineTo(-5,10); |
|
ctx.closePath(); |
|
ctx.restore(); |
|
ctx.fill(); |
|
} |
|
|
|
function drawLineWithArrow(ctx, x1, y1, x2, y2) |
|
{ |
|
ctx.beginPath(); |
|
ctx.moveTo(x1, y1); |
|
ctx.lineTo(x2, y2); |
|
ctx.stroke(); |
|
var rd = Math.atan((y2 - y1) / (x2 - x1)); |
|
rd += ((x2 > x1) ? 90 : -90) * Math.PI/180; |
|
drawArrowhead(ctx, x2, y2, rd); |
|
} |
|
|
|
Column { |
|
anchors.fill: parent |
|
spacing: 10 |
|
|
|
QGCLabel { |
|
text: "POWER CONFIG" |
|
font.pointSize: screenTools.dpiAdjustedPointSize(20); |
|
} |
|
|
|
QGCLabel { |
|
text: "Battery" |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(20); |
|
} |
|
|
|
Rectangle { |
|
width: parent.width |
|
height: 120 |
|
color: palette.windowShade |
|
|
|
Column { |
|
id: batteryColumn |
|
spacing: 10 |
|
anchors.verticalCenter: parent.verticalCenter |
|
x: (parent.x + 20) |
|
|
|
Row { |
|
spacing: 10 |
|
Column { |
|
id: voltageCol |
|
spacing: 10 |
|
Row { |
|
spacing: 10 |
|
QGCLabel { text: "Number of Cells (in Series)"; width: firstColumnWidth; anchors.baseline: cellsField.baseline} |
|
FactTextField { |
|
id: cellsField |
|
width: textEditWidth |
|
fact: Fact { name: "BAT_N_CELLS" } |
|
showUnits: true |
|
} |
|
} |
|
Row { |
|
id: battHighRow |
|
spacing: 10 |
|
QGCLabel { text: "Full Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battHighField.baseline} |
|
FactTextField { |
|
id: battHighField |
|
width: textEditWidth |
|
fact: Fact { name: "BAT_V_CHARGED" } |
|
showUnits: true |
|
} |
|
} |
|
Row { |
|
id: battLowRow |
|
spacing: 10 |
|
QGCLabel { text: "Empty Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battLowField.baseline} |
|
FactTextField { |
|
id: battLowField |
|
width: textEditWidth |
|
fact: Fact { name: "BAT_V_EMPTY" } |
|
showUnits: true |
|
} |
|
} |
|
} |
|
Canvas { |
|
id: arrows |
|
height: voltageCol.height |
|
width: 40 |
|
antialiasing: true |
|
Connections { |
|
target: screenTools |
|
onRepaintRequestedChanged: { |
|
arrows.requestPaint(); |
|
} |
|
} |
|
onPaint: { |
|
var y0 = voltageCol.mapFromItem(battHigh, 0, battHigh.height / 2).y; |
|
var y1 = voltageCol.mapFromItem(battLow, 0, battLow.height / 2).y; |
|
var context = getContext("2d"); |
|
context.reset(); |
|
context.strokeStyle = palette.button; |
|
context.fillStyle = palette.button; |
|
drawLineWithArrow(context, 0, y0, width, height * 0.25); |
|
drawLineWithArrow(context, 0, y1, width, height * 0.85); |
|
} |
|
} |
|
QGCColoredImage { |
|
height: voltageCol.height |
|
width: voltageCol.height * 0.75 |
|
source: getBatteryImage(); |
|
fillMode: Image.PreserveAspectFit |
|
smooth: true |
|
color: palette.button |
|
cache: false |
|
} |
|
Item { width: 20; height: 1; } |
|
Column { |
|
spacing: 10 |
|
anchors.verticalCenter: parent.verticalCenter |
|
Row { |
|
spacing: 10 |
|
QGCLabel { |
|
text: "Battery Max:" |
|
color: palette.text |
|
width: 80 |
|
font.pointSize: screenTools.dpiAdjustedPointSize(12); |
|
} |
|
QGCLabel { |
|
text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V' |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(12); |
|
} |
|
} |
|
Row { |
|
spacing: 10 |
|
QGCLabel { |
|
text: "Battery Min:" |
|
color: palette.text |
|
width: 80 |
|
font.pointSize: screenTools.dpiAdjustedPointSize(12); |
|
} |
|
QGCLabel { |
|
text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V' |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(12); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
/* |
|
* This is disabled for now |
|
Row { |
|
width: parent.width |
|
spacing: 30 |
|
visible: showAdvanced.checked |
|
Column { |
|
spacing: 10 |
|
width: (parent.width / 2) - 5 |
|
QGCLabel { |
|
text: "Propeller Function" |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(20); |
|
} |
|
Rectangle { |
|
width: parent.width |
|
height: 160 |
|
color: palette.windowShade |
|
} |
|
} |
|
Column { |
|
spacing: 10 |
|
width: (parent.width / 2) - 5 |
|
QGCLabel { |
|
text: "Magnetometer Distortion" |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(20); |
|
} |
|
Rectangle { |
|
width: parent.width |
|
height: 160 |
|
color: palette.windowShade |
|
} |
|
|
|
} |
|
} |
|
*/ |
|
//-- Advanced Settings |
|
QGCCheckBox { |
|
id: showAdvanced |
|
text: "Show Advanced Settings" |
|
} |
|
QGCLabel { |
|
text: "Advanced Power Settings" |
|
color: palette.text |
|
font.pointSize: screenTools.dpiAdjustedPointSize(20); |
|
visible: showAdvanced.checked |
|
} |
|
Rectangle { |
|
width: parent.width |
|
height: 40 |
|
color: palette.windowShade |
|
visible: showAdvanced.checked |
|
Column { |
|
id: advBatteryColumn |
|
spacing: 10 |
|
anchors.verticalCenter: parent.verticalCenter |
|
x: (parent.x + 20) |
|
Row { |
|
spacing: 10 |
|
QGCLabel { text: "Voltage Drop on Full Load (per cell)"; width: firstColumnWidth; anchors.baseline: battDropField.baseline} |
|
FactTextField { |
|
id: battDropField |
|
width: textEditWidth |
|
fact: Fact { name: "BAT_V_LOAD_DROP" } |
|
showUnits: true |
|
} |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|