From b2c326821e912a3116724470c7bbfb8c0606763d Mon Sep 17 00:00:00 2001 From: dogmaphobic Date: Mon, 9 Mar 2015 02:09:05 -0400 Subject: [PATCH] Added some battery graphics. Added "Advanced Settings" check box. --- qgroundcontrol.qrc | 6 + .../Images/PowerComponentBattery_01cell.svg | 21 ++ .../Images/PowerComponentBattery_02cell.svg | 22 ++ .../Images/PowerComponentBattery_03cell.svg | 23 ++ .../Images/PowerComponentBattery_04cell.svg | 24 ++ .../Images/PowerComponentBattery_05cell.svg | 25 ++ .../Images/PowerComponentBattery_06cell.svg | 26 +++ src/AutoPilotPlugins/PX4/PowerComponent.qml | 219 +++++++++++++++--- 8 files changed, 333 insertions(+), 33 deletions(-) create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_01cell.svg create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_02cell.svg create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_03cell.svg create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_04cell.svg create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_05cell.svg create mode 100644 src/AutoPilotPlugins/PX4/Images/PowerComponentBattery_06cell.svg diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 408e89bb9..48ec21583 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 000000000..c026fe3f8 --- /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 000000000..cd2b371cf --- /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 000000000..54859ffa1 --- /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 000000000..2d0dda8ec --- /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 000000000..150bc0b89 --- /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 000000000..1d8d9f26f --- /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 5a20eecd4..1ebed13d7 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" + } } } -- 2.22.0