diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index 6c60bb2..f56e139 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -550,8 +550,11 @@ QGCView { active: (_virtualJoystick ? _virtualJoystick.value : false) && !(_activeVehicle ? _activeVehicle.highLatencyLink : false) property bool useLightColors: isBackgroundDark + // The default behaviour is not centralized throttle + property bool centralizeThrottle: _virtualJoystickCentralized ? _virtualJoystickCentralized.value : false property Fact _virtualJoystick: QGroundControl.settingsManager.appSettings.virtualJoystick + property Fact _virtualJoystickCentralized: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized } ToolStrip { diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index 6d8458d..a60c925 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -86,6 +86,10 @@ Item { target: QGroundControl.settingsManager.appSettings.virtualJoystick onValueChanged: _setInstrumentWidget() } + Connections { + target: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized + onValueChanged: _setInstrumentWidget() + } Connections { target: QGroundControl.settingsManager.appSettings.showLargeCompass diff --git a/src/FlightDisplay/VirtualJoystick.qml b/src/FlightDisplay/VirtualJoystick.qml index 777f0ca..c73869c 100644 --- a/src/FlightDisplay/VirtualJoystick.qml +++ b/src/FlightDisplay/VirtualJoystick.qml @@ -18,7 +18,7 @@ import QGroundControl.Vehicle 1.0 Item { //property bool useLightColors - Must be passed in from loaded - + //property bool centralizeThrottle - Must be passed in from loaded Timer { interval: 40 // 25Hz, same as real joystick rate running: QGroundControl.settingsManager.appSettings.virtualJoystick.value && _activeVehicle @@ -39,8 +39,8 @@ Item { width: parent.height height: parent.height yAxisThrottle: true + yAxisThrottleCentered: centralizeThrottle lightColors: useLightColors - throttle: true } JoystickThumbPad { diff --git a/src/QmlControls/JoystickThumbPad.qml b/src/QmlControls/JoystickThumbPad.qml index de7b54e..6889ab3 100644 --- a/src/QmlControls/JoystickThumbPad.qml +++ b/src/QmlControls/JoystickThumbPad.qml @@ -11,26 +11,38 @@ Item { property real xAxis: 0 ///< Value range [-1,1], negative values left stick, positive values right stick property real yAxis: 0 ///< Value range [-1,1], negative values up stick, positive values down stick property bool yAxisThrottle: false ///< true: yAxis used for throttle, range [1,0], positive value are stick up + property bool yAxisThrottleCentered: false ///< false: center yAxis in throttle for reverser and forward property real xPositionDelta: 0 ///< Amount to move the control on x axis property real yPositionDelta: 0 ///< Amount to move the control on y axis - property bool throttle: false property real _centerXY: width / 2 property bool _processTouchPoints: false - property bool _stickCenteredOnce: false property real stickPositionX: _centerXY - property real stickPositionY: yAxisThrottle ? height : _centerXY + property real stickPositionY: yAxisThrottleCentered ? _centerXY : height QGCMapPalette { id: mapPal } - onStickPositionXChanged: { + onWidthChanged: calculateXAxis() + onStickPositionXChanged: calculateXAxis() + onHeightChanged: calculateYAxis() + onStickPositionYChanged: calculateYAxis() + + function calculateXAxis() + { + if(!visible()) { + return; + } var xAxisTemp = stickPositionX / width xAxisTemp *= 2.0 xAxisTemp -= 1.0 xAxis = xAxisTemp } - onStickPositionYChanged: { + function calculateYAxis() + { + if(!visible()) { + return; + } var yAxisTemp = stickPositionY / height yAxisTemp *= 2.0 yAxisTemp -= 1.0 @@ -50,7 +62,7 @@ Item { // Center sticks stickPositionX = _centerXY - if (!yAxisThrottle) { + if (yAxisThrottleCentered) { stickPositionY = _centerXY } } @@ -86,7 +98,7 @@ Item { QGCColoredImage { color: lightColors ? "white" : "black" - visible: throttle + visible: yAxisThrottle height: ScreenTools.defaultFontPixelHeight width: height sourceSize.height: height @@ -100,7 +112,7 @@ Item { QGCColoredImage { color: lightColors ? "white" : "black" - visible: throttle + visible: yAxisThrottle height: ScreenTools.defaultFontPixelHeight width: height sourceSize.height: height @@ -114,7 +126,7 @@ Item { QGCColoredImage { color: lightColors ? "white" : "black" - visible: throttle + visible: yAxisThrottle height: ScreenTools.defaultFontPixelHeight width: height sourceSize.height: height @@ -128,7 +140,7 @@ Item { QGCColoredImage { color: lightColors ? "white" : "black" - visible: throttle + visible: yAxisThrottle height: ScreenTools.defaultFontPixelHeight width: height sourceSize.height: height diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index 4e42382..37058d7 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -104,6 +104,13 @@ "defaultValue": false }, { + "name": "virtualJoystickCentralized", + "shortDescription": "Set virtual joystick to be centralize throttle (spring-loaded).", + "longDescription": "If this option is enabled the virtual joystick throttle stick will be centralized.", + "type": "bool", + "defaultValue": false +}, +{ "name": "gstDebugLevel", "shortDescription": "Video streaming debug", "longDescription": "Sets the environment variable GST_DEBUG for all pipeline elements on boot.", diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc index b9512f6..c8774f2 100644 --- a/src/Settings/AppSettings.cc +++ b/src/Settings/AppSettings.cc @@ -78,6 +78,7 @@ DECLARE_SETTINGSFACT(AppSettings, telemetrySave) DECLARE_SETTINGSFACT(AppSettings, telemetrySaveNotArmed) DECLARE_SETTINGSFACT(AppSettings, audioMuted) DECLARE_SETTINGSFACT(AppSettings, virtualJoystick) +DECLARE_SETTINGSFACT(AppSettings, virtualJoystickCentralized) DECLARE_SETTINGSFACT(AppSettings, appFontPointSize) DECLARE_SETTINGSFACT(AppSettings, showLargeCompass) DECLARE_SETTINGSFACT(AppSettings, savePath) diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h index 17cb0ec..afa5496 100644 --- a/src/Settings/AppSettings.h +++ b/src/Settings/AppSettings.h @@ -33,6 +33,7 @@ public: DEFINE_SETTINGFACT(telemetrySaveNotArmed) DEFINE_SETTINGFACT(audioMuted) DEFINE_SETTINGFACT(virtualJoystick) + DEFINE_SETTINGFACT(virtualJoystickCentralized) DEFINE_SETTINGFACT(appFontPointSize) DEFINE_SETTINGFACT(indoorPalette) DEFINE_SETTINGFACT(showLargeCompass) diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index ad4a90a..66983e1 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -455,6 +455,17 @@ QGCView { property Fact _virtualJoystick: QGroundControl.settingsManager.appSettings.virtualJoystick } + FactCheckBox { + text: qsTr("Auto-Center throttle") + visible: _virtualJoystickCentralized.visible && ( + QGroundControl.multiVehicleManager.activeVehicle.sub || QGroundControl.multiVehicleManager.activeVehicle.rover + ) + fact: _virtualJoystickCentralized + Layout.leftMargin: _margins + + property Fact _virtualJoystickCentralized: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized + } + GridLayout { columns: 2