From 1048dacc277d8aef0ad253572629a8fb6d3e30de Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 27 Feb 2017 18:15:59 -0800 Subject: [PATCH] New QGCGroupBox control --- qgroundcontrol.qrc | 1 + src/AutoPilotPlugins/PX4/PowerComponent.qml | 865 +++++++++--------- src/QmlControls/QGCGroupBox.qml | 32 + .../QGroundControl.Controls.qmldir | 1 + 4 files changed, 443 insertions(+), 456 deletions(-) create mode 100644 src/QmlControls/QGCGroupBox.qml diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 512e9dcd0..aa49c237b 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -79,6 +79,7 @@ src/QmlControls/QGCFlickable.qml src/QmlControls/QGCFlickableHorizontalIndicator.qml src/QmlControls/QGCFlickableVerticalIndicator.qml + src/QmlControls/QGCGroupBox.qml src/QmlControls/QGCLabel.qml src/QmlControls/QGCListView.qml src/QmlControls/QGCMapLabel.qml diff --git a/src/AutoPilotPlugins/PX4/PowerComponent.qml b/src/AutoPilotPlugins/PX4/PowerComponent.qml index 5b9108341..7d992a40f 100644 --- a/src/AutoPilotPlugins/PX4/PowerComponent.qml +++ b/src/AutoPilotPlugins/PX4/PowerComponent.qml @@ -7,11 +7,6 @@ * ****************************************************************************/ - -/// @file -/// @brief Battery, propeller and magnetometer settings -/// @author Gus Grubba - import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Dialogs 1.2 @@ -30,527 +25,485 @@ SetupPage { Component { id: pageComponent - Column { - id: innerColumn - width: availableWidth - spacing: ScreenTools.defaultFontPixelHeight * 0.5 - - property int textEditWidth: ScreenTools.defaultFontPixelWidth * 8 - - property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS") - property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED") - property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY") - property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP") - property Fact battVoltageDivider: controller.getParameterFact(-1, "BAT_V_DIV") - property Fact battAmpsPerVolt: controller.getParameterFact(-1, "BAT_A_PER_V") - property Fact uavcanEnable: controller.getParameterFact(-1, "UAVCAN_ENABLE", false) - - readonly property string highlightPrefix: "" - readonly property string highlightSuffix: "" - - - function getBatteryImage() - { - switch(battNumCells.value) { - case 1: return "/qmlimages/PowerComponentBattery_01cell.svg"; - case 2: return "/qmlimages/PowerComponentBattery_02cell.svg" - case 3: return "/qmlimages/PowerComponentBattery_03cell.svg" - case 4: return "/qmlimages/PowerComponentBattery_04cell.svg" - case 5: return "/qmlimages/PowerComponentBattery_05cell.svg" - case 6: return "/qmlimages/PowerComponentBattery_06cell.svg" - default: return "/qmlimages/PowerComponentBattery_01cell.svg"; + Item { + width: Math.max(availableWidth, innerColumn.width) + height: innerColumn.height + + ColumnLayout { + id: innerColumn + anchors.horizontalCenter: parent.horizontalCenter + spacing: ScreenTools.defaultFontPixelHeight + + property int textEditWidth: ScreenTools.defaultFontPixelWidth * 8 + + property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS") + property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED") + property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY") + property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP") + property Fact battVoltageDivider: controller.getParameterFact(-1, "BAT_V_DIV") + property Fact battAmpsPerVolt: controller.getParameterFact(-1, "BAT_A_PER_V") + property Fact uavcanEnable: controller.getParameterFact(-1, "UAVCAN_ENABLE", false) + + readonly property string highlightPrefix: "" + readonly property string highlightSuffix: "" + + + function getBatteryImage() + { + switch(battNumCells.value) { + case 1: return "/qmlimages/PowerComponentBattery_01cell.svg"; + case 2: return "/qmlimages/PowerComponentBattery_02cell.svg" + case 3: return "/qmlimages/PowerComponentBattery_03cell.svg" + case 4: return "/qmlimages/PowerComponentBattery_04cell.svg" + case 5: return "/qmlimages/PowerComponentBattery_05cell.svg" + case 6: return "/qmlimages/PowerComponentBattery_06cell.svg" + default: return "/qmlimages/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); - } - - PowerComponentController { - id: controller - factPanel: powerPage.viewPanel - - onOldFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware."), StandardButton.Ok) - onNewerFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl."), StandardButton.Ok) - onBatteryConnected: showMessage(qsTr("ESC Calibration"), qsTr("Performing calibration. This will take a few seconds.."), 0) - onCalibrationFailed: showMessage(qsTr("ESC Calibration failed"), errorMessage, StandardButton.Ok) - onCalibrationSuccess: showMessage(qsTr("ESC Calibration"), qsTr("Calibration complete. You can disconnect your battery now if you like."), StandardButton.Ok) - onConnectBattery: showMessage(qsTr("ESC Calibration"), highlightPrefix + qsTr("WARNING: Props must be removed from vehicle prior to performing ESC calibration.") + highlightSuffix + qsTr(" Connect the battery now and calibration will begin."), 0) - onDisconnectBattery: showMessage(qsTr("ESC Calibration failed"), qsTr("You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again."), StandardButton.Ok) - } - - Component { - id: calcVoltageDividerDlgComponent - - QGCViewDialog { - id: calcVoltageDividerDlg - - QGCFlickable { - anchors.fill: parent - contentHeight: column.height - contentWidth: column.width - - Column { - id: column - width: calcVoltageDividerDlg.width - spacing: ScreenTools.defaultFontPixelHeight - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: "Measure battery voltage using an external voltmeter and enter the value below. Click Calculate to set the new voltage multiplier." - } + 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); + } + + PowerComponentController { + id: controller + factPanel: powerPage.viewPanel + + onOldFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware."), StandardButton.Ok) + onNewerFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl."), StandardButton.Ok) + onBatteryConnected: showMessage(qsTr("ESC Calibration"), qsTr("Performing calibration. This will take a few seconds.."), 0) + onCalibrationFailed: showMessage(qsTr("ESC Calibration failed"), errorMessage, StandardButton.Ok) + onCalibrationSuccess: showMessage(qsTr("ESC Calibration"), qsTr("Calibration complete. You can disconnect your battery now if you like."), StandardButton.Ok) + onConnectBattery: showMessage(qsTr("ESC Calibration"), highlightPrefix + qsTr("WARNING: Props must be removed from vehicle prior to performing ESC calibration.") + highlightSuffix + qsTr(" Connect the battery now and calibration will begin."), 0) + onDisconnectBattery: showMessage(qsTr("ESC Calibration failed"), qsTr("You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again."), StandardButton.Ok) + } + + Component { + id: calcVoltageDividerDlgComponent + + QGCViewDialog { + id: calcVoltageDividerDlg - Grid { - columns: 2 - spacing: ScreenTools.defaultFontPixelHeight / 2 - verticalItemAlignment: Grid.AlignVCenter + QGCFlickable { + anchors.fill: parent + contentHeight: column.height + contentWidth: column.width + + Column { + id: column + width: calcVoltageDividerDlg.width + spacing: ScreenTools.defaultFontPixelHeight QGCLabel { - text: "Measured voltage:" + width: parent.width + wrapMode: Text.WordWrap + text: "Measure battery voltage using an external voltmeter and enter the value below. Click Calculate to set the new voltage multiplier." } - QGCTextField { id: measuredVoltage } - QGCLabel { text: "Vehicle voltage:" } - QGCLabel { text: controller.vehicle.battery.voltage.valueString } + Grid { + columns: 2 + spacing: ScreenTools.defaultFontPixelHeight / 2 + verticalItemAlignment: Grid.AlignVCenter - QGCLabel { text: "Voltage divider:" } - FactLabel { fact: battVoltageDivider } - } + QGCLabel { + text: "Measured voltage:" + } + QGCTextField { id: measuredVoltage } - QGCButton { - text: "Calculate" + QGCLabel { text: "Vehicle voltage:" } + QGCLabel { text: controller.vehicle.battery.voltage.valueString } - onClicked: { - var measuredVoltageValue = parseFloat(measuredVoltage.text) - if (measuredVoltageValue == 0 || isNaN(measuredVoltageValue)) { - return - } - var newVoltageDivider = (measuredVoltageValue * battVoltageDivider.value) / controller.vehicle.battery.voltage.value - if (newVoltageDivider > 0) { - battVoltageDivider.value = newVoltageDivider - } + QGCLabel { text: "Voltage divider:" } + FactLabel { fact: battVoltageDivider } } - } - } // Column - } // QGCFlickable - } // QGCViewDialog - } // Component - calcVoltageDividerDlgComponent - - Component { - id: calcAmpsPerVoltDlgComponent - QGCViewDialog { - id: calcAmpsPerVoltDlg + QGCButton { + text: "Calculate" + + onClicked: { + var measuredVoltageValue = parseFloat(measuredVoltage.text) + if (measuredVoltageValue == 0 || isNaN(measuredVoltageValue)) { + return + } + var newVoltageDivider = (measuredVoltageValue * battVoltageDivider.value) / controller.vehicle.battery.voltage.value + if (newVoltageDivider > 0) { + battVoltageDivider.value = newVoltageDivider + } + } + } + } // Column + } // QGCFlickable + } // QGCViewDialog + } // Component - calcVoltageDividerDlgComponent - QGCFlickable { - anchors.fill: parent - contentHeight: column.height - contentWidth: column.width + Component { + id: calcAmpsPerVoltDlgComponent - Column { - id: column - width: calcAmpsPerVoltDlg.width - spacing: ScreenTools.defaultFontPixelHeight + QGCViewDialog { + id: calcAmpsPerVoltDlg - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: "Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value." - } + QGCFlickable { + anchors.fill: parent + contentHeight: column.height + contentWidth: column.width - Grid { - columns: 2 - spacing: ScreenTools.defaultFontPixelHeight / 2 - verticalItemAlignment: Grid.AlignVCenter + Column { + id: column + width: calcAmpsPerVoltDlg.width + spacing: ScreenTools.defaultFontPixelHeight QGCLabel { - text: "Measured current:" + width: parent.width + wrapMode: Text.WordWrap + text: "Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value." } - QGCTextField { id: measuredCurrent } - QGCLabel { text: "Vehicle current:" } - QGCLabel { text: controller.vehicle.battery.current.valueString } + Grid { + columns: 2 + spacing: ScreenTools.defaultFontPixelHeight / 2 + verticalItemAlignment: Grid.AlignVCenter - QGCLabel { text: "Amps per volt:" } - FactLabel { fact: battAmpsPerVolt } - } + QGCLabel { + text: "Measured current:" + } + QGCTextField { id: measuredCurrent } - QGCButton { - text: "Calculate" + QGCLabel { text: "Vehicle current:" } + QGCLabel { text: controller.vehicle.battery.current.valueString } - onClicked: { - var measuredCurrentValue = parseFloat(measuredCurrent.text) - if (measuredCurrentValue == 0) { - return - } - var newAmpsPerVolt = (measuredCurrentValue * battAmpsPerVolt.value) / controller.vehicle.battery.current.value - if (newAmpsPerVolt != 0) { - battAmpsPerVolt.value = newAmpsPerVolt + QGCLabel { text: "Amps per volt:" } + FactLabel { fact: battAmpsPerVolt } + } + + QGCButton { + text: "Calculate" + + onClicked: { + var measuredCurrentValue = parseFloat(measuredCurrent.text) + if (measuredCurrentValue == 0) { + return + } + var newAmpsPerVolt = (measuredCurrentValue * battAmpsPerVolt.value) / controller.vehicle.battery.current.value + if (newAmpsPerVolt != 0) { + battAmpsPerVolt.value = newAmpsPerVolt + } } } - } - } // Column - } // QGCFlickable - } // QGCViewDialog - } // Component - calcAmpsPerVoltDlgComponent - - - QGCLabel { - text: qsTr("Battery") - font.family: ScreenTools.demiboldFontFamily - } - - Rectangle { - width: parent.width - height: batteryGrid.height + ScreenTools.defaultFontPixelHeight - color: qgcPal.windowShade - - GridLayout { - id: batteryGrid - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: parent.left - anchors.top: parent.top - columns: 5 - columnSpacing: ScreenTools.defaultFontPixelWidth - - QGCLabel { - text: qsTr("Number of Cells (in Series)") - } + } // Column + } // QGCFlickable + } // QGCViewDialog + } // Component - calcAmpsPerVoltDlgComponent - FactTextField { - id: cellsField - width: textEditWidth - fact: battNumCells - showUnits: true - } + QGCGroupBox { + id: batteryGroup + title: qsTr("Battery") - QGCColoredImage { - id: batteryImage - Layout.rowSpan: 3 - width: height * 0.75 - height: 100 - sourceSize.height: height - fillMode: Image.PreserveAspectFit - smooth: true - color: qgcPal.text - cache: false - source: getBatteryImage(); - } + GridLayout { + id: batteryGrid + columns: 5 + columnSpacing: ScreenTools.defaultFontPixelWidth - Item { width: 1; height: 1; Layout.columnSpan: 2 } + QGCLabel { + text: qsTr("Number of Cells (in Series)") + } - QGCLabel { - id: battHighLabel - text: qsTr("Full Voltage (per cell)") - } + FactTextField { + id: cellsField + width: textEditWidth + fact: battNumCells + showUnits: true + } - FactTextField { - id: battHighField - width: textEditWidth - fact: battHighVolt - showUnits: true - } + QGCColoredImage { + id: batteryImage + Layout.rowSpan: 3 + width: height * 0.75 + height: 100 + sourceSize.height: height + fillMode: Image.PreserveAspectFit + smooth: true + color: qgcPal.text + cache: false + source: getBatteryImage(); + } - QGCLabel { - text: qsTr("Battery Max:") - } + Item { width: 1; height: 1; Layout.columnSpan: 2 } - QGCLabel { - text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V' - } + QGCLabel { + id: battHighLabel + text: qsTr("Full Voltage (per cell)") + } - QGCLabel { - id: battLowLabel - text: qsTr("Empty Voltage (per cell)") - } + FactTextField { + id: battHighField + width: textEditWidth + fact: battHighVolt + showUnits: true + } - FactTextField { - id: battLowField - width: textEditWidth - fact: battLowVolt - showUnits: true - } + QGCLabel { + text: qsTr("Battery Max:") + } - QGCLabel { - text: qsTr("Battery Min:") - } + QGCLabel { + text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V' + } - QGCLabel { - text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V' - } + QGCLabel { + id: battLowLabel + text: qsTr("Empty Voltage (per cell)") + } - QGCLabel { - text: qsTr("Voltage divider") - } + FactTextField { + id: battLowField + width: textEditWidth + fact: battLowVolt + showUnits: true + } - FactTextField { - id: voltMultField - fact: battVoltageDivider - } + QGCLabel { + text: qsTr("Battery Min:") + } - QGCButton { - id: voltMultCalculateButton - text: "Calculate" - onClicked: showDialog(calcVoltageDividerDlgComponent, qsTr("Calculate Voltage Divider"), powerPage.showDialogDefaultWidth, StandardButton.Close) - } + QGCLabel { + text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V' + } - Item { width: 1; height: 1; Layout.columnSpan: 2 } + QGCLabel { + text: qsTr("Voltage divider") + } - QGCLabel { - id: voltMultHelp - Layout.columnSpan: batteryGrid.columns - Layout.fillWidth: true - font.pointSize: ScreenTools.smallFontPointSize - wrapMode: Text.WordWrap - text: "If the battery voltage reported by the vehicle is largely different than the voltage read externally using a voltmeter you can adjust the voltage multiplier value to correct this. " + - "Click the Calculate button for help with calculating a new value." - } + FactTextField { + id: voltMultField + fact: battVoltageDivider + } - QGCLabel { - id: ampPerVoltLabel - text: qsTr("Amps per volt") - } + QGCButton { + id: voltMultCalculateButton + text: "Calculate" + onClicked: showDialog(calcVoltageDividerDlgComponent, qsTr("Calculate Voltage Divider"), powerPage.showDialogDefaultWidth, StandardButton.Close) + } - FactTextField { - id: ampPerVoltField - fact: battAmpsPerVolt - } + Item { width: 1; height: 1; Layout.columnSpan: 2 } - QGCButton { - id: ampPerVoltCalculateButton - text: "Calculate" - onClicked: showDialog(calcAmpsPerVoltDlgComponent, qsTr("Calculate Amps per Volt"), powerPage.showDialogDefaultWidth, StandardButton.Close) - } + QGCLabel { + id: voltMultHelp + Layout.columnSpan: batteryGrid.columns + Layout.fillWidth: true + font.pointSize: ScreenTools.smallFontPointSize + wrapMode: Text.WordWrap + text: "If the battery voltage reported by the vehicle is largely different than the voltage read externally using a voltmeter you can adjust the voltage multiplier value to correct this. " + + "Click the Calculate button for help with calculating a new value." + } - Item { width: 1; height: 1; Layout.columnSpan: 2 } + QGCLabel { + id: ampPerVoltLabel + text: qsTr("Amps per volt") + } - QGCLabel { - id: ampPerVoltHelp - Layout.columnSpan: batteryGrid.columns - Layout.fillWidth: true - font.pointSize: ScreenTools.smallFontPointSize - wrapMode: Text.WordWrap - text: "If the current draw reported by the vehicle is largely different than the current read externally using a current meter you can adjust the amps per volt value to correct this. " + - "Click the Calculate button for help with calculating a new value." - } - } // Grid - } // Rectangle - Battery settings - - QGCLabel { - text: qsTr("ESC PWM Minimum and Maximum Calibration") - font.family: ScreenTools.demiboldFontFamily - } - - Rectangle { - width: parent.width - height: escCalColumn.height + ScreenTools.defaultFontPixelHeight - color: qgcPal.windowShade - - Column { - id : escCalColumn - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - spacing: ScreenTools.defaultFontPixelWidth - - QGCLabel { - width: parent.width - color: qgcPal.warningText - wrapMode: Text.WordWrap - text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.") - } + FactTextField { + id: ampPerVoltField + fact: battAmpsPerVolt + } - QGCLabel { - text: qsTr("You must use USB connection for this operation.") - } + QGCButton { + id: ampPerVoltCalculateButton + text: "Calculate" + onClicked: showDialog(calcAmpsPerVoltDlgComponent, qsTr("Calculate Amps per Volt"), powerPage.showDialogDefaultWidth, StandardButton.Close) + } - QGCButton { - text: qsTr("Calibrate") - width: ScreenTools.defaultFontPixelWidth * 20 - onClicked: controller.calibrateEsc() - } - } - } - - QGCCheckBox { - id: showUAVCAN - text: qsTr("Show UAVCAN Settings") - checked: uavcanEnable.rawValue != 0 - } - - QGCLabel { - text: qsTr("UAVCAN Bus Configuration") - font.family: ScreenTools.demiboldFontFamily - visible: showUAVCAN.checked - } - - Rectangle { - width: parent.width - height: uavCanConfigRow.height + ScreenTools.defaultFontPixelHeight - color: qgcPal.windowShade - visible: showUAVCAN.checked - - Row { - id: uavCanConfigRow - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: parent.left - anchors.top: parent.top - spacing: ScreenTools.defaultFontPixelWidth - - FactComboBox { - id: uavcanEnabledCheckBox - width: ScreenTools.defaultFontPixelWidth * 20 - fact: uavcanEnable - indexModel: false - } + Item { width: 1; height: 1; Layout.columnSpan: 2 } - QGCLabel { - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Change required restart") - } - } - } - - QGCLabel { - text: qsTr("UAVCAN Motor Index and Direction Assignment") - font.family: ScreenTools.demiboldFontFamily - visible: showUAVCAN.checked - } - - Rectangle { - width: parent.width - height: uavCanEscCalColumn.height + ScreenTools.defaultFontPixelHeight - color: qgcPal.windowShade - visible: showUAVCAN.checked - enabled: uavcanEnabledCheckBox.checked - - Column { - id: uavCanEscCalColumn - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - spacing: ScreenTools.defaultFontPixelWidth - - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - color: qgcPal.warningText - text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.") - } + QGCLabel { + id: ampPerVoltHelp + Layout.columnSpan: batteryGrid.columns + Layout.fillWidth: true + font.pointSize: ScreenTools.smallFontPointSize + wrapMode: Text.WordWrap + text: "If the current draw reported by the vehicle is largely different than the current read externally using a current meter you can adjust the amps per volt value to correct this. " + + "Click the Calculate button for help with calculating a new value." + } + } // Grid + } // QGCGroupBox - Battery settings - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: qsTr("ESC parameters will only be accessible in the editor after assignment.") - } + QGCGroupBox { + anchors.left: batteryGroup.left + anchors.right: batteryGroup.right + title: qsTr("ESC PWM Minimum and Maximum Calibration") - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: qsTr("Start the process, then turn each motor into its turn direction, in the order of their motor indices.") - } + ColumnLayout { + anchors.left: parent.left + anchors.right: parent.right + spacing: ScreenTools.defaultFontPixelWidth - QGCButton { - text: qsTr("Start Assignment") - width: ScreenTools.defaultFontPixelWidth * 20 - onClicked: controller.busConfigureActuators() - } + QGCLabel { + color: qgcPal.warningText + wrapMode: Text.WordWrap + text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.") + Layout.fillWidth: true + } + + QGCLabel { + text: qsTr("You must use USB connection for this operation.") + } - QGCButton { - text: qsTr("Stop Assignment") - width: ScreenTools.defaultFontPixelWidth * 20 - onClicked: controller.stopBusConfigureActuators() + QGCButton { + text: qsTr("Calibrate") + width: ScreenTools.defaultFontPixelWidth * 20 + onClicked: controller.calibrateEsc() + } } } - } - - QGCCheckBox { - id: showAdvanced - text: qsTr("Show Advanced Settings") - } - - QGCLabel { - text: qsTr("Advanced Power Settings") - font.family: ScreenTools.demiboldFontFamily - visible: showAdvanced.checked - } - - Rectangle { - id: batteryRectangle - width: parent.width - height: advBatteryColumn.height + ScreenTools.defaultFontPixelHeight - color: qgcPal.windowShade - visible: showAdvanced.checked - - Column { - id: advBatteryColumn - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - spacing: ScreenTools.defaultFontPixelWidth - Row { - spacing: ScreenTools.defaultFontPixelWidth + QGCCheckBox { + id: showUAVCAN + text: qsTr("Show UAVCAN Settings") + checked: uavcanEnable.rawValue != 0 + } - QGCLabel { - text: qsTr("Voltage Drop on Full Load (per cell)") - anchors.baseline: battDropField.baseline + QGCGroupBox { + anchors.left: batteryGroup.left + anchors.right: batteryGroup.right + title: qsTr("UAVCAN Bus Configuration") + visible: showUAVCAN.checked + + Row { + id: uavCanConfigRow + spacing: ScreenTools.defaultFontPixelWidth + + FactComboBox { + id: uavcanEnabledCheckBox + width: ScreenTools.defaultFontPixelWidth * 20 + fact: uavcanEnable + indexModel: false } - FactTextField { - id: battDropField - width: textEditWidth - fact: battVoltLoadDrop - showUnits: true + QGCLabel { + anchors.verticalCenter: parent.verticalCenter + text: qsTr("Change required restart") } } + } - QGCLabel { - width: parent.width - wrapMode: Text.WordWrap - text: qsTr("Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full ") + - qsTr("throttle, divided by the number of battery cells. Leave at the default if unsure. ") + - highlightPrefix + qsTr("If this value is set too high, the battery might be deep discharged and damaged.") + highlightSuffix - } + QGCGroupBox { + anchors.left: batteryGroup.left + anchors.right: batteryGroup.right + title: qsTr("UAVCAN Motor Index and Direction Assignment") + visible: showUAVCAN.checked - Row { - spacing: ScreenTools.defaultFontPixelWidth + ColumnLayout { + anchors.left: parent.left + anchors.right: parent.right + spacing: ScreenTools.defaultFontPixelWidth QGCLabel { - text: qsTr("Compensated Minimum Voltage:") + wrapMode: Text.WordWrap + color: qgcPal.warningText + text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.") + Layout.fillWidth: true } QGCLabel { - text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + qsTr(" V") + wrapMode: Text.WordWrap + text: qsTr("ESC parameters will only be accessible in the editor after assignment.") + Layout.fillWidth: true + } + + QGCLabel { + wrapMode: Text.WordWrap + text: qsTr("Start the process, then turn each motor into its turn direction, in the order of their motor indices.") + Layout.fillWidth: true + } + + QGCButton { + text: qsTr("Start Assignment") + width: ScreenTools.defaultFontPixelWidth * 20 + onClicked: controller.busConfigureActuators() + } + + QGCButton { + text: qsTr("Stop Assignment") + width: ScreenTools.defaultFontPixelWidth * 20 + onClicked: controller.stopBusConfigureActuators() } } } - } // Rectangle - Advanced power settings - } // Column + + QGCCheckBox { + id: showAdvanced + text: qsTr("Show Advanced Settings") + } + + QGCGroupBox { + anchors.left: batteryGroup.left + anchors.right: batteryGroup.right + title: qsTr("Advanced Power Settings") + visible: showAdvanced.checked + + ColumnLayout { + anchors.left: parent.left + anchors.right: parent.right + spacing: ScreenTools.defaultFontPixelWidth + + Row { + spacing: ScreenTools.defaultFontPixelWidth + + QGCLabel { + text: qsTr("Voltage Drop on Full Load (per cell)") + anchors.baseline: battDropField.baseline + } + + FactTextField { + id: battDropField + width: textEditWidth + fact: battVoltLoadDrop + showUnits: true + } + } + + QGCLabel { + wrapMode: Text.WordWrap + text: qsTr("Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full ") + + qsTr("throttle, divided by the number of battery cells. Leave at the default if unsure. ") + + highlightPrefix + qsTr("If this value is set too high, the battery might be deep discharged and damaged.") + highlightSuffix + Layout.fillWidth: true + } + + Row { + spacing: ScreenTools.defaultFontPixelWidth + + QGCLabel { + text: qsTr("Compensated Minimum Voltage:") + } + + QGCLabel { + text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + qsTr(" V") + } + } + } // Column + } // QGCGroupBox - Advanced power settings + } // Column + } // Item } // Component } // SetupPage diff --git a/src/QmlControls/QGCGroupBox.qml b/src/QmlControls/QGCGroupBox.qml new file mode 100644 index 000000000..60217970c --- /dev/null +++ b/src/QmlControls/QGCGroupBox.qml @@ -0,0 +1,32 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Controls 2.0 + +import QGroundControl.Palette 1.0 +import QGroundControl.ScreenTools 1.0 + +GroupBox { + id: control + + QGCPalette { id: qgcPal; colorGroupEnabled: enabled } + + background: Rectangle { + y: control.topPadding - control.padding + width: parent.width + height: parent.height - control.topPadding + control.padding + color: qgcPal.windowShade + } + + label: QGCLabel { + width: control.availableWidth + text: control.title + } +} diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir index 2040fedc4..97d45d626 100644 --- a/src/QmlControls/QGroundControl.Controls.qmldir +++ b/src/QmlControls/QGroundControl.Controls.qmldir @@ -31,6 +31,7 @@ QGCCheckBox 1.0 QGCCheckBox.qml QGCColoredImage 1.0 QGCColoredImage.qml QGCComboBox 1.0 QGCComboBox.qml QGCFlickable 1.0 QGCFlickable.qml +QGCGroupBox 1.0 QGCGroupBox.qml QGCLabel 1.0 QGCLabel.qml QGCListView 1.0 QGCListView.qml QGCMapLabel 1.0 QGCMapLabel.qml -- 2.22.0