diff --git a/src/AutoPilotPlugins/Common/SetupPage.qml b/src/AutoPilotPlugins/Common/SetupPage.qml index 96231c9863767b798501e204b5401f39ed5ecfe7..f59cd7dc0c9d071d771bd7d544735713c6a676a0 100644 --- a/src/AutoPilotPlugins/Common/SetupPage.qml +++ b/src/AutoPilotPlugins/Common/SetupPage.qml @@ -25,6 +25,8 @@ QGCView { viewPanel: setupPanel property alias pageComponent: pageLoader.sourceComponent + property string pageName: vehicleComponent ? vehicleComponent.name : "" + property string pageDescription: vehicleComponent ? vehicleComponent.description : "" property real availableWidth: width - pageLoader.x property real availableHeight: height - pageLoader.y @@ -49,7 +51,7 @@ QGCView { QGCLabel { font.pointSize: ScreenTools.largeFontPointSize - text: vehicleComponent.name + " " + qsTr("Setup") + text: pageName + " " + qsTr("Setup") visible: !ScreenTools.isShortScreen } @@ -57,7 +59,7 @@ QGCView { anchors.left: parent.left anchors.right: parent.right wrapMode: Text.WordWrap - text: vehicleComponent.description + text: pageDescription visible: !ScreenTools.isShortScreen } } diff --git a/src/VehicleSetup/JoystickConfig.qml b/src/VehicleSetup/JoystickConfig.qml index a5a971fca2494aebb29aec5a4e51eae2a8fd57e5..45128a08740334b2b172c8a0d02353a8b5a31410 100644 --- a/src/VehicleSetup/JoystickConfig.qml +++ b/src/VehicleSetup/JoystickConfig.qml @@ -21,688 +21,679 @@ import QGroundControl.FactSystem 1.0 import QGroundControl.FactControls 1.0 /// Joystick Config -QGCView { - id: rootQGCView - viewPanel: panel - - QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled } - - readonly property string dialogTitle: qsTr("Joystick Config") - readonly property real labelToMonitorMargin: defaultTextWidth * 3 - property bool controllerCompleted: false - property bool controllerAndViewReady: false - - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - property var _activeJoystick: joystickManager.activeJoystick - - JoystickConfigController { - id: controller - factPanel: panel - statusText: statusText - cancelButton: cancelButton - nextButton: nextButton - skipButton: skipButton - - Component.onCompleted: { - controllerCompleted = true - if (rootQGCView.completedSignalled) { - controllerAndViewReady = true - controller.start() +SetupPage { + id: joystickPage + pageComponent: pageComponent + pageName: qsTr("Joystick") + pageDescription: qsTr("Joystick Setup is used to configure a calibrate joysticks.") + + Component { + id: pageComponent + + Item { + width: availableWidth + height: Math.max(leftColumn.height, rightColumn.height) + + property bool controllerCompleted: false + property bool controllerAndViewReady: false + + readonly property real labelToMonitorMargin: defaultTextWidth * 3 + + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var _activeJoystick: joystickManager.activeJoystick + + JoystickConfigController { + id: controller + factPanel: joystickPage.viewPanel + statusText: statusText + cancelButton: cancelButton + nextButton: nextButton + skipButton: skipButton + + Component.onCompleted: { + controllerCompleted = true + if (joystickPage.completedSignalled) { + controllerAndViewReady = true + controller.start() + } + } } - } - } - onCompleted: { - if (controllerCompleted) { - controllerAndViewReady = true - controller.start() - } - } + Component.onCompleted: { + if (controllerCompleted) { + controllerAndViewReady = true + controller.start() + } + } - QGCViewPanel { - id: panel - anchors.fill: parent + // Live axis monitor control component + Component { + id: axisMonitorDisplayComponent - // Live axis monitor control component - Component { - id: axisMonitorDisplayComponent + Item { + property int axisValue: 0 - Item { - property int axisValue: 0 + property int __lastAxisValue: 0 + readonly property int __axisValueMaxJitter: 100 + property color __barColor: qgcPal.windowShade - property int __lastAxisValue: 0 - readonly property int __axisValueMaxJitter: 100 - property color __barColor: qgcPal.windowShade + // Bar + Rectangle { + id: bar + anchors.verticalCenter: parent.verticalCenter + width: parent.width + height: parent.height / 2 + color: __barColor + } - // Bar - Rectangle { - id: bar - anchors.verticalCenter: parent.verticalCenter - width: parent.width - height: parent.height / 2 - color: __barColor - } + // Center point + Rectangle { + anchors.horizontalCenter: parent.horizontalCenter + width: defaultTextWidth / 2 + height: parent.height + color: qgcPal.window + } - // Center point - Rectangle { - anchors.horizontalCenter: parent.horizontalCenter - width: defaultTextWidth / 2 - height: parent.height - color: qgcPal.window - } + // Indicator + Rectangle { + anchors.verticalCenter: parent.verticalCenter + width: parent.height * 0.75 + height: width + x: (reversed ? (parent.width - _indicatorPosition) : _indicatorPosition) - (width / 2) + radius: width / 2 + color: qgcPal.text + visible: mapped + + property real _percentAxisValue: ((axisValue + 32768.0) / (32768.0 * 2)) + property real _indicatorPosition: parent.width * _percentAxisValue + } - // Indicator - Rectangle { - anchors.verticalCenter: parent.verticalCenter - width: parent.height * 0.75 - height: width - x: (reversed ? (parent.width - _indicatorPosition) : _indicatorPosition) - (width / 2) - radius: width / 2 - color: qgcPal.text - visible: mapped - - property real _percentAxisValue: ((axisValue + 32768.0) / (32768.0 * 2)) - property real _indicatorPosition: parent.width * _percentAxisValue - } + QGCLabel { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: qsTr("Not Mapped") + visible: !mapped + } - QGCLabel { - anchors.fill: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: qsTr("Not Mapped") - visible: !mapped - } + ColorAnimation { + id: barAnimation + target: bar + property: "color" + from: "yellow" + to: __barColor + duration: 1500 + } - ColorAnimation { - id: barAnimation - target: bar - property: "color" - from: "yellow" - to: __barColor - duration: 1500 + /* + // Axis value debugger + QGCLabel { + anchors.fill: parent + text: axisValue + } + */ } + } // Component - axisMonitorDisplayComponent -/* - // Axis value debugger - QGCLabel { - anchors.fill: parent - text: axisValue - } -*/ - } - } // Component - axisMonitorDisplayComponent + // Main view Qml starts here + + // Left side column + Column { + id: leftColumn + anchors.rightMargin: ScreenTools.defaultFontPixelWidth + anchors.left: parent.left + anchors.right: rightColumn.left + spacing: 10 - // Main view Qml starts here + // Attitude Controls + Column { + width: parent.width + spacing: 5 - QGCLabel { - id: header - font.pointSize: ScreenTools.mediumFontPointSize - text: qsTr("JOYSTICK") - } + QGCLabel { text: qsTr("Attitude Controls") } - Item { - id: spacer - anchors.top: header.bottom - width: parent.width - height: 10 - } - - // Left side column - Column { - id: leftColumn - anchors.rightMargin: ScreenTools.defaultFontPixelWidth - anchors.top: spacer.bottom - anchors.left: parent.left - anchors.right: rightColumn.left - spacing: 10 - - // Attitude Controls - Column { - width: parent.width - spacing: 5 + Item { + width: parent.width + height: defaultTextHeight * 2 - QGCLabel { text: qsTr("Attitude Controls") } + QGCLabel { + id: rollLabel + width: defaultTextWidth * 10 + text: qsTr("Roll") + } - Item { - width: parent.width - height: defaultTextHeight * 2 + Loader { + id: rollLoader + anchors.left: rollLabel.right + anchors.right: parent.right + height: ScreenTools.defaultFontPixelHeight + width: 100 + sourceComponent: axisMonitorDisplayComponent + + property real defaultTextWidth: ScreenTools.defaultFontPixelWidth + property bool mapped: controller.rollAxisMapped + property bool reversed: controller.rollAxisReversed + } - QGCLabel { - id: rollLabel - width: defaultTextWidth * 10 - text: qsTr("Roll") - } + Connections { + target: controller - Loader { - id: rollLoader - anchors.left: rollLabel.right - anchors.right: parent.right - height: rootQGCView.defaultTextHeight - width: 100 - sourceComponent: axisMonitorDisplayComponent - - property real defaultTextWidth: rootQGCView.defaultTextWidth - property bool mapped: controller.rollAxisMapped - property bool reversed: controller.rollAxisReversed + onRollAxisValueChanged: rollLoader.item.axisValue = value + } } - Connections { - target: controller + Item { + width: parent.width + height: defaultTextHeight * 2 - onRollAxisValueChanged: rollLoader.item.axisValue = value - } - } + QGCLabel { + id: pitchLabel + width: defaultTextWidth * 10 + text: qsTr("Pitch") + } - Item { - width: parent.width - height: defaultTextHeight * 2 + Loader { + id: pitchLoader + anchors.left: pitchLabel.right + anchors.right: parent.right + height: ScreenTools.defaultFontPixelHeight + width: 100 + sourceComponent: axisMonitorDisplayComponent + + property real defaultTextWidth: ScreenTools.defaultFontPixelWidth + property bool mapped: controller.pitchAxisMapped + property bool reversed: controller.pitchAxisReversed + } - QGCLabel { - id: pitchLabel - width: defaultTextWidth * 10 - text: qsTr("Pitch") - } + Connections { + target: controller - Loader { - id: pitchLoader - anchors.left: pitchLabel.right - anchors.right: parent.right - height: rootQGCView.defaultTextHeight - width: 100 - sourceComponent: axisMonitorDisplayComponent - - property real defaultTextWidth: rootQGCView.defaultTextWidth - property bool mapped: controller.pitchAxisMapped - property bool reversed: controller.pitchAxisReversed + onPitchAxisValueChanged: pitchLoader.item.axisValue = value + } } - Connections { - target: controller + Item { + width: parent.width + height: defaultTextHeight * 2 - onPitchAxisValueChanged: pitchLoader.item.axisValue = value - } - } + QGCLabel { + id: yawLabel + width: defaultTextWidth * 10 + text: qsTr("Yaw") + } - Item { - width: parent.width - height: defaultTextHeight * 2 + Loader { + id: yawLoader + anchors.left: yawLabel.right + anchors.right: parent.right + height: ScreenTools.defaultFontPixelHeight + width: 100 + sourceComponent: axisMonitorDisplayComponent + + property real defaultTextWidth: ScreenTools.defaultFontPixelWidth + property bool mapped: controller.yawAxisMapped + property bool reversed: controller.yawAxisReversed + } - QGCLabel { - id: yawLabel - width: defaultTextWidth * 10 - text: qsTr("Yaw") - } + Connections { + target: controller - Loader { - id: yawLoader - anchors.left: yawLabel.right - anchors.right: parent.right - height: rootQGCView.defaultTextHeight - width: 100 - sourceComponent: axisMonitorDisplayComponent - - property real defaultTextWidth: rootQGCView.defaultTextWidth - property bool mapped: controller.yawAxisMapped - property bool reversed: controller.yawAxisReversed + onYawAxisValueChanged: yawLoader.item.axisValue = value + } } - Connections { - target: controller + Item { + width: parent.width + height: defaultTextHeight * 2 - onYawAxisValueChanged: yawLoader.item.axisValue = value - } - } + QGCLabel { + id: throttleLabel + width: defaultTextWidth * 10 + text: qsTr("Throttle") + } - Item { - width: parent.width - height: defaultTextHeight * 2 + Loader { + id: throttleLoader + anchors.left: throttleLabel.right + anchors.right: parent.right + height: ScreenTools.defaultFontPixelHeight + width: 100 + sourceComponent: axisMonitorDisplayComponent + + property real defaultTextWidth: ScreenTools.defaultFontPixelWidth + property bool mapped: controller.throttleAxisMapped + property bool reversed: controller.throttleAxisReversed + } - QGCLabel { - id: throttleLabel - width: defaultTextWidth * 10 - text: qsTr("Throttle") - } + Connections { + target: controller - Loader { - id: throttleLoader - anchors.left: throttleLabel.right - anchors.right: parent.right - height: rootQGCView.defaultTextHeight - width: 100 - sourceComponent: axisMonitorDisplayComponent - - property real defaultTextWidth: rootQGCView.defaultTextWidth - property bool mapped: controller.throttleAxisMapped - property bool reversed: controller.throttleAxisReversed + onThrottleAxisValueChanged: throttleLoader.item.axisValue = value + } } + } // Column - Attitude Control labels - Connections { - target: controller + // Command Buttons + Row { + spacing: 10 + + QGCButton { + id: skipButton + text: qsTr("Skip") - onThrottleAxisValueChanged: throttleLoader.item.axisValue = value + onClicked: controller.skipButtonClicked() } - } - } // Column - Attitude Control labels - // Command Buttons - Row { - spacing: 10 + QGCButton { + id: cancelButton + text: qsTr("Cancel") - QGCButton { - id: skipButton - text: qsTr("Skip") + onClicked: controller.cancelButtonClicked() + } - onClicked: controller.skipButtonClicked() - } + QGCButton { + id: nextButton + primary: true + text: qsTr("Calibrate") - QGCButton { - id: cancelButton - text: qsTr("Cancel") + onClicked: controller.nextButtonClicked() + } + } // Row - Buttons - onClicked: controller.cancelButtonClicked() + // Status Text + QGCLabel { + id: statusText + width: parent.width + wrapMode: Text.WordWrap } - QGCButton { - id: nextButton - primary: true - text: qsTr("Calibrate") - - onClicked: controller.nextButtonClicked() + Rectangle { + width: parent.width + height: 1 + border.color: qgcPal.text + border.width: 1 } - } // Row - Buttons - // Status Text - QGCLabel { - id: statusText - width: parent.width - wrapMode: Text.WordWrap - } - - Rectangle { - width: parent.width - height: 1 - border.color: qgcPal.text - border.width: 1 - } - - // Settings - Row { - width: parent.width - spacing: ScreenTools.defaultFontPixelWidth - - // Left column settings - Column { - width: parent.width / 2 - spacing: ScreenTools.defaultFontPixelHeight - - QGCLabel { text: qsTr("Additional Joystick settings:") } + // Settings + Row { + width: parent.width + spacing: ScreenTools.defaultFontPixelWidth + // Left column settings Column { - width: parent.width + width: parent.width / 2 spacing: ScreenTools.defaultFontPixelHeight + QGCLabel { text: qsTr("Additional Joystick settings:") } - QGCCheckBox { - enabled: checked || _activeJoystick.calibrated - text: _activeJoystick.calibrated ? qsTr("Enable joystick input") : qsTr("Enable not allowed (Calibrate First)") - checked: _activeVehicle.joystickEnabled + Column { + width: parent.width + spacing: ScreenTools.defaultFontPixelHeight - onClicked: _activeVehicle.joystickEnabled = checked - } - Row { - width: parent.width - spacing: ScreenTools.defaultFontPixelWidth + QGCCheckBox { + enabled: checked || _activeJoystick.calibrated + text: _activeJoystick.calibrated ? qsTr("Enable joystick input") : qsTr("Enable not allowed (Calibrate First)") + checked: _activeVehicle.joystickEnabled - QGCLabel { - id: activeJoystickLabel - anchors.baseline: joystickCombo.baseline - text: qsTr("Active joystick:") + onClicked: _activeVehicle.joystickEnabled = checked } - QGCComboBox { - id: joystickCombo - width: parent.width - activeJoystickLabel.width - parent.spacing - model: joystickManager.joystickNames + Row { + width: parent.width + spacing: ScreenTools.defaultFontPixelWidth - onActivated: joystickManager.activeJoystickName = textAt(index) + QGCLabel { + id: activeJoystickLabel + anchors.baseline: joystickCombo.baseline + text: qsTr("Active joystick:") + } - Component.onCompleted: { - var index = joystickCombo.find(joystickManager.activeJoystickName) - if (index == -1) { - console.warn(qsTr("Active joystick name not in combo"), joystickManager.activeJoystickName) - } else { - joystickCombo.currentIndex = index + QGCComboBox { + id: joystickCombo + width: parent.width - activeJoystickLabel.width - parent.spacing + model: joystickManager.joystickNames + + onActivated: joystickManager.activeJoystickName = textAt(index) + + Component.onCompleted: { + var index = joystickCombo.find(joystickManager.activeJoystickName) + if (index == -1) { + console.warn(qsTr("Active joystick name not in combo"), joystickManager.activeJoystickName) + } else { + joystickCombo.currentIndex = index + } } } } - } - Column { - spacing: ScreenTools.defaultFontPixelHeight / 3 - visible: _activeVehicle.supportsThrottleModeCenterZero + Column { + spacing: ScreenTools.defaultFontPixelHeight / 3 + visible: _activeVehicle.supportsThrottleModeCenterZero - ExclusiveGroup { id: throttleModeExclusiveGroup } + ExclusiveGroup { id: throttleModeExclusiveGroup } - QGCRadioButton { - exclusiveGroup: throttleModeExclusiveGroup - text: qsTr("Center stick is zero throttle") - checked: _activeJoystick.throttleMode == 0 + QGCRadioButton { + exclusiveGroup: throttleModeExclusiveGroup + text: qsTr("Center stick is zero throttle") + checked: _activeJoystick.throttleMode == 0 - onClicked: _activeJoystick.throttleMode = 0 - } + onClicked: _activeJoystick.throttleMode = 0 + } - QGCRadioButton { - exclusiveGroup: throttleModeExclusiveGroup - text: qsTr("Full down stick is zero throttle") - checked: _activeJoystick.throttleMode == 1 + QGCRadioButton { + exclusiveGroup: throttleModeExclusiveGroup + text: qsTr("Full down stick is zero throttle") + checked: _activeJoystick.throttleMode == 1 - onClicked: _activeJoystick.throttleMode = 1 + onClicked: _activeJoystick.throttleMode = 1 + } } - } - Column { - spacing: ScreenTools.defaultFontPixelHeight / 3 + Column { + spacing: ScreenTools.defaultFontPixelHeight / 3 - QGCCheckBox { - id: exponential - checked: _activeJoystick.exponential - text: qsTr("Use exponential curve on roll, pitch, yaw") + QGCCheckBox { + id: exponential + checked: _activeJoystick.exponential + text: qsTr("Use exponential curve on roll, pitch, yaw") - onClicked: _activeJoystick.exponential = checked + onClicked: _activeJoystick.exponential = checked + } } - } - QGCCheckBox { - id: advancedSettings - checked: _activeVehicle.joystickMode != 0 - text: qsTr("Advanced settings (careful!)") + QGCCheckBox { + id: advancedSettings + checked: _activeVehicle.joystickMode != 0 + text: qsTr("Advanced settings (careful!)") - onClicked: { - if (!checked) { - _activeVehicle.joystickMode = 0 + onClicked: { + if (!checked) { + _activeVehicle.joystickMode = 0 + } } } - } - Row { - width: parent.width - spacing: ScreenTools.defaultFontPixelWidth - visible: advancedSettings.checked - - QGCLabel { - id: joystickModeLabel - anchors.baseline: joystickModeCombo.baseline - text: qsTr("Joystick mode:") - } + Row { + width: parent.width + spacing: ScreenTools.defaultFontPixelWidth + visible: advancedSettings.checked + + QGCLabel { + id: joystickModeLabel + anchors.baseline: joystickModeCombo.baseline + text: qsTr("Joystick mode:") + } - QGCComboBox { - id: joystickModeCombo - currentIndex: _activeVehicle.joystickMode - width: ScreenTools.defaultFontPixelWidth * 20 - model: _activeVehicle.joystickModes + QGCComboBox { + id: joystickModeCombo + currentIndex: _activeVehicle.joystickMode + width: ScreenTools.defaultFontPixelWidth * 20 + model: _activeVehicle.joystickModes - onActivated: _activeVehicle.joystickMode = index + onActivated: _activeVehicle.joystickMode = index + } } } - } - } // Column - left column + } // Column - left column - // Right column settings - Column { - width: parent.width / 2 - spacing: ScreenTools.defaultFontPixelHeight + // Right column settings + Column { + width: parent.width / 2 + spacing: ScreenTools.defaultFontPixelHeight - Connections { - target: _activeJoystick + Connections { + target: _activeJoystick - onRawButtonPressedChanged: { - if (buttonActionRepeater.itemAt(index)) { - buttonActionRepeater.itemAt(index).pressed = pressed - } - if (jsButtonActionRepeater.itemAt(index)) { - jsButtonActionRepeater.itemAt(index).pressed = pressed + onRawButtonPressedChanged: { + if (buttonActionRepeater.itemAt(index)) { + buttonActionRepeater.itemAt(index).pressed = pressed + } + if (jsButtonActionRepeater.itemAt(index)) { + jsButtonActionRepeater.itemAt(index).pressed = pressed + } } } - } - QGCLabel { text: qsTr("Button actions:") } + QGCLabel { text: qsTr("Button actions:") } - Column { - width: parent.width - spacing: ScreenTools.defaultFontPixelHeight / 3 + Column { + width: parent.width + spacing: ScreenTools.defaultFontPixelHeight / 3 - QGCLabel { - visible: _activeVehicle.manualControlReservedButtonCount != 0 - text: qsTr("Buttons 0-%1 reserved for firmware use").arg(reservedButtonCount) + QGCLabel { + visible: _activeVehicle.manualControlReservedButtonCount != 0 + text: qsTr("Buttons 0-%1 reserved for firmware use").arg(reservedButtonCount) - property int reservedButtonCount: _activeVehicle.manualControlReservedButtonCount == -1 ? _activeJoystick.totalButtonCount : _activeVehicle.manualControlReservedButtonCount - } + property int reservedButtonCount: _activeVehicle.manualControlReservedButtonCount == -1 ? _activeJoystick.totalButtonCount : _activeVehicle.manualControlReservedButtonCount + } - Repeater { - id: buttonActionRepeater - model: _activeJoystick.totalButtonCount + Repeater { + id: buttonActionRepeater + model: _activeJoystick.totalButtonCount - Row { - spacing: ScreenTools.defaultFontPixelWidth - visible: (_activeVehicle.manualControlReservedButtonCount == -1 ? false : modelData >= _activeVehicle.manualControlReservedButtonCount) && !_activeVehicle.supportsJSButton + Row { + spacing: ScreenTools.defaultFontPixelWidth + visible: (_activeVehicle.manualControlReservedButtonCount == -1 ? false : modelData >= _activeVehicle.manualControlReservedButtonCount) && !_activeVehicle.supportsJSButton - property bool pressed + property bool pressed - QGCCheckBox { - anchors.verticalCenter: parent.verticalCenter - checked: _activeJoystick.buttonActions[modelData] != "" + QGCCheckBox { + anchors.verticalCenter: parent.verticalCenter + checked: _activeJoystick.buttonActions[modelData] != "" - onClicked: _activeJoystick.setButtonAction(modelData, checked ? buttonActionCombo.textAt(buttonActionCombo.currentIndex) : "") - } + onClicked: _activeJoystick.setButtonAction(modelData, checked ? buttonActionCombo.textAt(buttonActionCombo.currentIndex) : "") + } - Rectangle { - anchors.verticalCenter: parent.verticalCenter - width: ScreenTools.defaultFontPixelHeight * 1.5 - height: width - border.width: 1 - border.color: qgcPal.text - color: pressed ? qgcPal.buttonHighlight : qgcPal.button - - - QGCLabel { - anchors.fill: parent - color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: modelData + Rectangle { + anchors.verticalCenter: parent.verticalCenter + width: ScreenTools.defaultFontPixelHeight * 1.5 + height: width + border.width: 1 + border.color: qgcPal.text + color: pressed ? qgcPal.buttonHighlight : qgcPal.button + + + QGCLabel { + anchors.fill: parent + color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: modelData + } } - } - QGCComboBox { - id: buttonActionCombo - width: ScreenTools.defaultFontPixelWidth * 20 - model: _activeJoystick.actions + QGCComboBox { + id: buttonActionCombo + width: ScreenTools.defaultFontPixelWidth * 20 + model: _activeJoystick.actions - onActivated: _activeJoystick.setButtonAction(modelData, textAt(index)) - Component.onCompleted: currentIndex = find(_activeJoystick.buttonActions[modelData]) + onActivated: _activeJoystick.setButtonAction(modelData, textAt(index)) + Component.onCompleted: currentIndex = find(_activeJoystick.buttonActions[modelData]) + } } - } - } // Repeater - - Row { - spacing: ScreenTools.defaultFontPixelWidth - visible: _activeVehicle.supportsJSButton - - QGCLabel { - horizontalAlignment: Text.AlignHCenter - width: ScreenTools.defaultFontPixelHeight * 1.5 - text: qsTr("#") - } - - QGCLabel { - width: ScreenTools.defaultFontPixelWidth * 15 - text: qsTr("Function: ") - } - - QGCLabel { - width: ScreenTools.defaultFontPixelWidth * 15 - text: qsTr("Shift Function: ") - } - } // Row - - Repeater { - id: jsButtonActionRepeater - model: _activeJoystick.totalButtonCount + } // Repeater Row { spacing: ScreenTools.defaultFontPixelWidth visible: _activeVehicle.supportsJSButton - property bool pressed - - Rectangle { - anchors.verticalCenter: parent.verticalCenter - width: ScreenTools.defaultFontPixelHeight * 1.5 - height: width - border.width: 1 - border.color: qgcPal.text - color: pressed ? qgcPal.buttonHighlight : qgcPal.button - - - QGCLabel { - anchors.fill: parent - color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: modelData - } + QGCLabel { + horizontalAlignment: Text.AlignHCenter + width: ScreenTools.defaultFontPixelHeight * 1.5 + text: qsTr("#") } - FactComboBox { - id: mainJSButtonActionCombo - width: ScreenTools.defaultFontPixelWidth * 15 - fact: controller.parameterExists(-1, "BTN"+index+"_FUNCTION") ? controller.getParameterFact(-1, "BTN" + index + "_FUNCTION") : null; - indexModel: false + QGCLabel { + width: ScreenTools.defaultFontPixelWidth * 15 + text: qsTr("Function: ") } - FactComboBox { - id: shiftJSButtonActionCombo - width: ScreenTools.defaultFontPixelWidth * 15 - fact: controller.parameterExists(-1, "BTN"+index+"_SFUNCTION") ? controller.getParameterFact(-1, "BTN" + index + "_SFUNCTION") : null; - indexModel: false + QGCLabel { + width: ScreenTools.defaultFontPixelWidth * 15 + text: qsTr("Shift Function: ") } } // Row - } // Repeater - } // Column - } // Column - right setting column - } // Row - Settings - } // Column - Left Main Column - - // Right side column - Column { - id: rightColumn - anchors.top: parent.top - anchors.right: parent.right - width: defaultTextWidth * 35 - spacing: 10 - - Image { - //width: parent.width - height: defaultTextHeight * 15 - fillMode: Image.PreserveAspectFit - smooth: true - source: controller.imageHelp - } - // Axis monitor + Repeater { + id: jsButtonActionRepeater + model: _activeJoystick.totalButtonCount + + Row { + spacing: ScreenTools.defaultFontPixelWidth + visible: _activeVehicle.supportsJSButton + + property bool pressed + + Rectangle { + anchors.verticalCenter: parent.verticalCenter + width: ScreenTools.defaultFontPixelHeight * 1.5 + height: width + border.width: 1 + border.color: qgcPal.text + color: pressed ? qgcPal.buttonHighlight : qgcPal.button + + + QGCLabel { + anchors.fill: parent + color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: modelData + } + } + + FactComboBox { + id: mainJSButtonActionCombo + width: ScreenTools.defaultFontPixelWidth * 15 + fact: controller.parameterExists(-1, "BTN"+index+"_FUNCTION") ? controller.getParameterFact(-1, "BTN" + index + "_FUNCTION") : null; + indexModel: false + } + + FactComboBox { + id: shiftJSButtonActionCombo + width: ScreenTools.defaultFontPixelWidth * 15 + fact: controller.parameterExists(-1, "BTN"+index+"_SFUNCTION") ? controller.getParameterFact(-1, "BTN" + index + "_SFUNCTION") : null; + indexModel: false + } + } // Row + } // Repeater + } // Column + } // Column - right setting column + } // Row - Settings + } // Column - Left Main Column + + // Right side column Column { - width: parent.width - spacing: 5 + id: rightColumn + anchors.top: parent.top + anchors.right: parent.right + width: defaultTextWidth * 35 + spacing: 10 + + Image { + //width: parent.width + height: defaultTextHeight * 15 + fillMode: Image.PreserveAspectFit + smooth: true + source: controller.imageHelp + } - QGCLabel { text: qsTr("Axis Monitor") } + // Axis monitor + Column { + width: parent.width + spacing: 5 - Connections { - target: controller + QGCLabel { text: qsTr("Axis Monitor") } - onAxisValueChanged: { - if (axisMonitorRepeater.itemAt(axis)) { - axisMonitorRepeater.itemAt(axis).loader.item.axisValue = value + Connections { + target: controller + + onAxisValueChanged: { + if (axisMonitorRepeater.itemAt(axis)) { + axisMonitorRepeater.itemAt(axis).loader.item.axisValue = value + } } } - } - Repeater { - id: axisMonitorRepeater - model: _activeJoystick.axisCount - width: parent.width + Repeater { + id: axisMonitorRepeater + model: _activeJoystick.axisCount + width: parent.width - Row { - spacing: 5 + Row { + spacing: 5 - // Need this to get to loader from Connections above - property Item loader: theLoader + // Need this to get to loader from Connections above + property Item loader: theLoader - QGCLabel { - id: axisLabel - text: modelData - } + QGCLabel { + id: axisLabel + text: modelData + } - Loader { - id: theLoader - anchors.verticalCenter: axisLabel.verticalCenter - height: rootQGCView.defaultTextHeight - width: 200 - sourceComponent: axisMonitorDisplayComponent - - property real defaultTextWidth: rootQGCView.defaultTextWidth - property bool mapped: true - readonly property bool reversed: false + Loader { + id: theLoader + anchors.verticalCenter: axisLabel.verticalCenter + height: ScreenTools.defaultFontPixelHeight + width: 200 + sourceComponent: axisMonitorDisplayComponent + + property real defaultTextWidth: ScreenTools.defaultFontPixelWidth + property bool mapped: true + readonly property bool reversed: false + } } } - } - } // Column - Axis Monitor + } // Column - Axis Monitor - // Button monitor - Column { - width: parent.width - spacing: ScreenTools.defaultFontPixelHeight + // Button monitor + Column { + width: parent.width + spacing: ScreenTools.defaultFontPixelHeight - QGCLabel { text: qsTr("Button Monitor") } + QGCLabel { text: qsTr("Button Monitor") } - Connections { - target: _activeJoystick + Connections { + target: _activeJoystick - onRawButtonPressedChanged: { - if (buttonMonitorRepeater.itemAt(index)) { - buttonMonitorRepeater.itemAt(index).pressed = pressed + onRawButtonPressedChanged: { + if (buttonMonitorRepeater.itemAt(index)) { + buttonMonitorRepeater.itemAt(index).pressed = pressed + } } } - } - Row { - spacing: -1 + Flow { + width: parent.width + spacing: -1 - Repeater { - id: buttonMonitorRepeater - model: _activeJoystick.totalButtonCount + Repeater { + id: buttonMonitorRepeater + model: _activeJoystick.totalButtonCount - Rectangle { - width: ScreenTools.defaultFontPixelHeight * 1.2 - height: width - border.width: 1 - border.color: qgcPal.text - color: pressed ? qgcPal.buttonHighlight : qgcPal.button + Rectangle { + width: ScreenTools.defaultFontPixelHeight * 1.2 + height: width + border.width: 1 + border.color: qgcPal.text + color: pressed ? qgcPal.buttonHighlight : qgcPal.button - property bool pressed + property bool pressed - QGCLabel { - anchors.fill: parent - color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - text: modelData + QGCLabel { + anchors.fill: parent + color: pressed ? qgcPal.buttonHighlightText : qgcPal.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: modelData + } } - } - } // Repeater - } // Row - } // Column - Axis Monitor - } // Column - Right Column - } // QGCViewPanel -} + } // Repeater + } // Row + } // Column - Axis Monitor + } // Column - Right Column + } // Item + } // Component - pageComponent +} // SetupPage diff --git a/src/VehicleSetup/SetupView.qml b/src/VehicleSetup/SetupView.qml index b4dbce505935c475d5351a8b5d4f799529da23b8..ab73e720cab3f063ae9ac08872a579ed5d878f5f 100644 --- a/src/VehicleSetup/SetupView.qml +++ b/src/VehicleSetup/SetupView.qml @@ -45,14 +45,14 @@ Rectangle { { if (_fullParameterVehicleAvailable) { if (QGroundControl.multiVehicleManager.activeVehicle.autopilot.vehicleComponents.length == 0) { - panelLoader.sourceComponent = noComponentsVehicleSummaryComponent + panelLoader.setSourceComponent(noComponentsVehicleSummaryComponent) } else { - panelLoader.source = "VehicleSummary.qml"; + panelLoader.setSource("VehicleSummary.qml") } } else if (QGroundControl.multiVehicleManager.parameterReadyVehicleAvailable) { - panelLoader.sourceComponent = missingParametersVehicleSummaryComponent + panelLoader.setSourceComponent(missingParametersVehicleSummaryComponent) } else { - panelLoader.sourceComponent = disconnectedVehicleSummaryComponent + panelLoader.setSourceComponent(disconnectedVehicleSummaryComponent) } } @@ -61,9 +61,9 @@ Rectangle { if (!ScreenTools.isMobile) { if (QGroundControl.multiVehicleManager.activeVehicleAvailable && QGroundControl.multiVehicleManager.activeVehicle.armed) { _messagePanelText = _armedVehicleText - panelLoader.sourceComponent = messagePanelComponent + panelLoader.setSourceComponent(messagePanelComponent) } else { - panelLoader.source = "FirmwareUpgrade.qml"; + panelLoader.setSource("FirmwareUpgrade.qml") } } } @@ -72,34 +72,33 @@ Rectangle { { if (QGroundControl.multiVehicleManager.activeVehicleAvailable && QGroundControl.multiVehicleManager.activeVehicle.armed) { _messagePanelText = _armedVehicleText - panelLoader.sourceComponent = messagePanelComponent + panelLoader.setSourceComponent(messagePanelComponent) } else { - panelLoader.source = "JoystickConfig.qml"; + panelLoader.setSource("JoystickConfig.qml") } } function showParametersPanel() { - panelLoader.source = "SetupParameterEditor.qml"; + panelLoader.setSource("SetupParameterEditor.qml") } function showPX4FlowPanel() { - panelLoader.source = "PX4FlowSensor.qml"; + panelLoader.setSource("PX4FlowSensor.qml") } function showVehicleComponentPanel(vehicleComponent) { if (QGroundControl.multiVehicleManager.activeVehicle.armed && !vehicleComponent.allowSetupWhileArmed) { _messagePanelText = _armedVehicleText - panelLoader.sourceComponent = messagePanelComponent + panelLoader.setSourceComponent(messagePanelComponent) } else { if (vehicleComponent.prerequisiteSetup != "") { _messagePanelText = vehicleComponent.prerequisiteSetup + " setup must be completed prior to " + vehicleComponent.name + " setup." - panelLoader.sourceComponent = messagePanelComponent + panelLoader.setSourceComponent(messagePanelComponent) } else { - panelLoader.vehicleComponent = vehicleComponent - panelLoader.source = vehicleComponent.setupSource + panelLoader.setSource(vehicleComponent.setupSource, vehicleComponent) for(var i = 0; i < componentRepeater.count; i++) { var obj = componentRepeater.itemAt(i); if (obj.text === vehicleComponent.name) { @@ -350,6 +349,16 @@ Rectangle { anchors.top: parent.top anchors.bottom: parent.bottom + function setSource(source, vehicleComponent) { + panelLoader.vehicleComponent = vehicleComponent + panelLoader.source = source + } + + function setSourceComponent(sourceComponent, vehicleComponent) { + panelLoader.vehicleComponent = vehicleComponent + panelLoader.sourceComponent = sourceComponent + } + property var vehicleComponent } }