|
|
|
@ -43,8 +43,54 @@ Rectangle {
@@ -43,8 +43,54 @@ Rectangle {
|
|
|
|
|
color: palette.window |
|
|
|
|
|
|
|
|
|
property int firstColumnWidth: 220 |
|
|
|
|
property int textEditWidth: 60 |
|
|
|
|
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 |
|
|
|
@ -54,8 +100,6 @@ Rectangle {
@@ -54,8 +100,6 @@ Rectangle {
|
|
|
|
|
font.pointSize: 20 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Item { height: 1; width: 10 } |
|
|
|
|
|
|
|
|
|
QGCLabel { |
|
|
|
|
text: "Battery" |
|
|
|
|
color: palette.text |
|
|
|
@ -75,44 +119,153 @@ Rectangle {
@@ -75,44 +119,153 @@ Rectangle {
|
|
|
|
|
|
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { text: "Number of Cells"; width: firstColumnWidth; anchors.baseline: cellsField.baseline} |
|
|
|
|
FactTextField { |
|
|
|
|
id: cellsField |
|
|
|
|
fact: Fact { name: "BAT_N_CELLS" } |
|
|
|
|
showUnits: true |
|
|
|
|
Column { |
|
|
|
|
id: voltageCol |
|
|
|
|
spacing: 10 |
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { text: "Number of Cells"; 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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
visible: showAdvanced.checked |
|
|
|
|
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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { text: "Full Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battHighField.baseline} |
|
|
|
|
FactTextField { |
|
|
|
|
id: battHighField |
|
|
|
|
fact: Fact { name: "BAT_V_CHARGED" } |
|
|
|
|
showUnits: true |
|
|
|
|
Canvas { |
|
|
|
|
id: arrows |
|
|
|
|
height: voltageCol.height |
|
|
|
|
width: 40 |
|
|
|
|
antialiasing: true |
|
|
|
|
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); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { text: "Empty Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battLowField.baseline} |
|
|
|
|
FactTextField { |
|
|
|
|
id: battLowField |
|
|
|
|
fact: Fact { name: "BAT_V_EMPTY" } |
|
|
|
|
showUnits: true |
|
|
|
|
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: 12 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
QGCLabel { |
|
|
|
|
text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V' |
|
|
|
|
color: palette.text |
|
|
|
|
font.pointSize: 12 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { |
|
|
|
|
text: "Battery Min:" |
|
|
|
|
color: palette.text |
|
|
|
|
width: 80 |
|
|
|
|
font.pointSize: 12 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
QGCLabel { |
|
|
|
|
text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V' |
|
|
|
|
color: palette.text |
|
|
|
|
font.pointSize: 12 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Row { |
|
|
|
|
spacing: 10 |
|
|
|
|
QGCLabel { text: "Voltage Drop on Full Load (per cell)"; width: firstColumnWidth; anchors.baseline: battDropField.baseline} |
|
|
|
|
FactTextField { |
|
|
|
|
id: battDropField |
|
|
|
|
fact: Fact { name: "BAT_V_LOAD_DROP" } |
|
|
|
|
showUnits: true |
|
|
|
|
} |
|
|
|
|
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: 20 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
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: 20 * __screenTools.dpiFactor; |
|
|
|
|
} |
|
|
|
|
Rectangle { |
|
|
|
|
width: parent.width |
|
|
|
|
height: 160 |
|
|
|
|
color: palette.windowShade |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//-- Advanced Settings |
|
|
|
|
QGCCheckBox { |
|
|
|
|
id: showAdvanced |
|
|
|
|
text: "Show Advanced Settings" |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|