diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 408e89bb9f51c408f6dbed2160b9fcaff25167fe..48ec2158367e718c3538cca3259981160dffa658 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -300,6 +300,12 @@
src/AutoPilotPlugins/PX4/Images/PowerComponentIcon.png
src/VehicleSetup/FirmwareUpgradeIcon.png
src/VehicleSetup/VehicleSummaryIcon.png
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_01cell.svg
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_02cell.svg
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_03cell.svg
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_04cell.svg
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_05cell.svg
+ src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_06cell.svg
src/ui/toolbar/MainToolBar.qml
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_01cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_01cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c026fe3f82a0d6843f3a425f7aace1ad0f24345b
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_01cell.svg
@@ -0,0 +1,21 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_02cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_02cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cd2b371cf9909ccfc60d190316464f7b366f7ace
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_02cell.svg
@@ -0,0 +1,22 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_03cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_03cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..54859ffa16a9908275142041ece91f6fc3ce1f11
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_03cell.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_04cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_04cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2d0dda8ec05742853bab5253ab387ad02ac46007
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_04cell.svg
@@ -0,0 +1,24 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_05cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_05cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..150bc0b897dcc6b11c97ebb55cfdc7f065a6af93
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_05cell.svg
@@ -0,0 +1,25 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_06cell.svg b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_06cell.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1d8d9f26f6d57ecffc80cde65c87d9a3fa279136
--- /dev/null
+++ b/src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_06cell.svg
@@ -0,0 +1,26 @@
+
+
+
diff --git a/src/AutoPilotPlugins/PX4/PowerComponent.qml b/src/AutoPilotPlugins/PX4/PowerComponent.qml
index 5a20eecd483ad2cf13f2af3b32618a62ff35e863..1ebed13d752e129add8ac7cf877edca4ea813ec5 100644
--- a/src/AutoPilotPlugins/PX4/PowerComponent.qml
+++ b/src/AutoPilotPlugins/PX4/PowerComponent.qml
@@ -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 {
font.pointSize: 20 * __screenTools.dpiFactor;
}
- Item { height: 1; width: 10 }
-
QGCLabel {
text: "Battery"
color: palette.text
@@ -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"
+ }
}
}