diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index 2a5b31ee7d8a8261b8e1b48fd86ef3a38a1222b1..13b7d54db63604217045809733e7c50a82fc6a47 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -38,6 +38,7 @@ Item { property bool _airspaceEnabled: QGroundControl.airmapSupported ? QGroundControl.settingsManager.airMapSettings.enableAirMap.rawValue : false readonly property real _margins: ScreenTools.defaultFontPixelHeight * 0.5 + readonly property bool _useAlternateInstrumentPanel: QGroundControl.settingsManager.flyViewSettings.alternateInstrumentPanel.value QGCMapPalette { id: mapPal; lightColors: useLightColors } @@ -74,12 +75,21 @@ Item { break; } } else { - instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidgetAlternate.qml" + if(_useAlternateInstrumentPanel){ + instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidgetAlternate.qml" + } + else{ + instrumentsLoader.source = "qrc:/qml/QGCInstrumentWidget.qml" + } } } else { instrumentsLoader.source = "" } } + Connections { + target: QGroundControl.settingsManager.flyViewSettings.alternateInstrumentPanel + onValueChanged: _setInstrumentWidget() + } Connections { target: QGroundControl.settingsManager.appSettings.virtualJoystick diff --git a/src/FlightMap/Widgets/QGCInstrumentWidget.qml b/src/FlightMap/Widgets/QGCInstrumentWidget.qml index ce763892b083691ce94a91f724aa7ea568cdd434..71df61ae07ce573adfb3e786a17ee059b1b18529 100644 --- a/src/FlightMap/Widgets/QGCInstrumentWidget.qml +++ b/src/FlightMap/Widgets/QGCInstrumentWidget.qml @@ -7,6 +7,7 @@ * ****************************************************************************/ + import QtQuick 2.3 import QGroundControl 1.0 @@ -17,157 +18,74 @@ import QGroundControl.FlightMap 1.0 import QGroundControl.Palette 1.0 Rectangle { - id: instrumentPanel - height: instrumentColumn.height + (_topBottomMargin * 2) + id: root width: getPreferredInstrumentWidth() - radius: _showLargeCompass ? width / 2 : ScreenTools.defaultFontPixelWidth / 2 - color: _backgroundColor - border.width: _showLargeCompass ? 1 : 0 + height: _outerRadius * 2 + radius: _outerRadius + color: qgcPal.window + border.width: 1 border.color: _isSatellite ? qgcPal.mapWidgetBorderLight : qgcPal.mapWidgetBorderDark - property real _maxHeight: maxHeight - property real _defaultSize: ScreenTools.defaultFontPixelHeight * (9) - property color _backgroundColor: qgcPal.window - property real _spacing: ScreenTools.defaultFontPixelHeight * 0.33 - property real _topBottomMargin: (width * 0.05) / 2 - property real _availableValueHeight: _maxHeight - (outerCompass.height + _spacer1.height + _spacer2.height + (_spacing * 4)) - (_showLargeCompass ? compass.height : 0) - property bool _showLargeCompass: QGroundControl.settingsManager.appSettings.showLargeCompass.value - - readonly property real _outerRingRatio: 0.95 - readonly property real _innerRingRatio: 0.80 - - QGCPalette { id: qgcPal } - - MouseArea { + property real _innerRadius: (width - (_topBottomMargin * 3)) / 4 + property real _outerRadius: _innerRadius + _topBottomMargin + property real _defaultSize: ScreenTools.defaultFontPixelHeight * (9) + property real _sizeRatio: ScreenTools.isTinyScreen ? (width / _defaultSize) * 0.5 : width / _defaultSize + property real _bigFontSize: ScreenTools.defaultFontPointSize * 2.5 * _sizeRatio + property real _normalFontSize: ScreenTools.defaultFontPointSize * 1.5 * _sizeRatio + property real _labelFontSize: ScreenTools.defaultFontPointSize * 0.75 * _sizeRatio + property real _spacing: ScreenTools.defaultFontPixelHeight * 0.33 + property real _topBottomMargin: (width * 0.05) / 2 + property real _availableValueHeight: maxHeight - (root.height + _valuesItem.anchors.topMargin) + + // Prevent all clicks from going through to lower layers + DeadMouseArea { anchors.fill: parent - onClicked: _valuesWidget.showPicker() } - Column { - id: instrumentColumn - anchors.topMargin: _topBottomMargin - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - spacing: _spacing - - Item { - width: parent.width - height: outerCompass.height - - CompassRing { - id: outerCompass - size: parent.width * _outerRingRatio - vehicle: activeVehicle - anchors.horizontalCenter: parent.horizontalCenter - visible: !_showLargeCompass - - } - - QGCAttitudeWidget { - id: attitudeWidget - size: parent.width * (_showLargeCompass ? _outerRingRatio : _innerRingRatio) - vehicle: activeVehicle - anchors.centerIn: outerCompass - showHeading: !_showLargeCompass - } - - Image { - id: gearThingy - anchors.bottom: outerCompass.bottom - anchors.right: outerCompass.right - source: qgcPal.globalTheme == QGCPalette.Light ? "/res/gear-black.svg" : "/res/gear-white.svg" - mipmap: true - opacity: 0.5 - width: outerCompass.width * 0.15 - sourceSize.width: width - fillMode: Image.PreserveAspectFit - MouseArea { - anchors.fill: parent - hoverEnabled: true - onEntered: gearThingy.opacity = 0.85 - onExited: gearThingy.opacity = 0.5 - onClicked: _valuesWidget.showPicker() - } - } - - Image { - id: healthWarning - anchors.bottom: outerCompass.bottom - anchors.left: outerCompass.left - source: "/qmlimages/Yield.svg" - mipmap: true - visible: activeVehicle ? !_warningsViewed && activeVehicle.unhealthySensors.length > 0 && _valuesWidget.currentPage() != 2 : false - opacity: 0.8 - width: outerCompass.width * 0.15 - sourceSize.width: width - fillMode: Image.PreserveAspectFit - - property bool _warningsViewed: false - - MouseArea { - anchors.fill: parent - hoverEnabled: true - onEntered: healthWarning.opacity = 1 - onExited: healthWarning.opacity = 0.8 - onClicked: { - _valuesWidget.showPage(2) - healthWarning._warningsViewed = true - } - } - - Connections { - target: activeVehicle - onUnhealthySensorsChanged: healthWarning._warningsViewed = false - } - } - } - - Rectangle { - id: _spacer1 - anchors.horizontalCenter: parent.horizontalCenter - height: 1 - width: parent.width * 0.9 - color: qgcPal.text - } + QGCPalette { id: qgcPal } - Item { - width: parent.width - height: _valuesWidget.height + QGCAttitudeWidget { + id: attitude + anchors.leftMargin: _topBottomMargin + anchors.left: parent.left + size: _innerRadius * 2 + vehicle: activeVehicle + anchors.verticalCenter: parent.verticalCenter + } - Rectangle { - anchors.fill: _valuesWidget - color: _backgroundColor - radius: _spacing - visible: !_showLargeCompass - } + QGCCompassWidget { + id: compass + anchors.leftMargin: _spacing + anchors.left: attitude.right + size: _innerRadius * 2 + vehicle: activeVehicle + anchors.verticalCenter: parent.verticalCenter + } - InstrumentSwipeView { - id: _valuesWidget - anchors.margins: 1 - anchors.left: parent.left - anchors.right: parent.right - textColor: qgcPal.text - backgroundColor: _backgroundColor - maxHeight: _availableValueHeight - } + Item { + id: _valuesItem + anchors.topMargin: ScreenTools.defaultFontPixelHeight / 4 + anchors.top: parent.bottom + width: parent.width + height: _valuesWidget.height + visible: widgetRoot.showValues + + // Prevent all clicks from going through to lower layers + DeadMouseArea { + anchors.fill: parent } Rectangle { - id: _spacer2 - anchors.horizontalCenter: parent.horizontalCenter - height: 1 - width: parent.width * 0.9 - color: qgcPal.text - visible: _showLargeCompass + anchors.fill: _valuesWidget + color: qgcPal.window } - QGCCompassWidget { - id: compass - anchors.horizontalCenter: parent.horizontalCenter - size: parent.width * 0.95 - vehicle: activeVehicle - visible: _showLargeCompass + PageView { + id: _valuesWidget + anchors.margins: 1 + anchors.left: parent.left + anchors.right: parent.right + maxHeight: _availableValueHeight } } } diff --git a/src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml b/src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml index 71df61ae07ce573adfb3e786a17ee059b1b18529..2fe5a260a740ba02c48e12ea61ef71e521071ef9 100644 --- a/src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml +++ b/src/FlightMap/Widgets/QGCInstrumentWidgetAlternate.qml @@ -19,15 +19,15 @@ import QGroundControl.Palette 1.0 Rectangle { id: root - width: getPreferredInstrumentWidth() - height: _outerRadius * 2 + width: getPreferredInstrumentWidth() * 0.7 + height: _outerRadius * 4 + _valuesWidget.height radius: _outerRadius color: qgcPal.window border.width: 1 border.color: _isSatellite ? qgcPal.mapWidgetBorderLight : qgcPal.mapWidgetBorderDark - property real _innerRadius: (width - (_topBottomMargin * 3)) / 4 - property real _outerRadius: _innerRadius + _topBottomMargin + property real _innerRadius: (width - (_topBottomMargin * 2)) / 2 + property real _outerRadius: _innerRadius + _topBottomMargin * 2 property real _defaultSize: ScreenTools.defaultFontPixelHeight * (9) property real _sizeRatio: ScreenTools.isTinyScreen ? (width / _defaultSize) * 0.5 : width / _defaultSize property real _bigFontSize: ScreenTools.defaultFontPointSize * 2.5 * _sizeRatio @@ -35,7 +35,7 @@ Rectangle { property real _labelFontSize: ScreenTools.defaultFontPointSize * 0.75 * _sizeRatio property real _spacing: ScreenTools.defaultFontPixelHeight * 0.33 property real _topBottomMargin: (width * 0.05) / 2 - property real _availableValueHeight: maxHeight - (root.height + _valuesItem.anchors.topMargin) + property real _availableValueHeight: maxHeight - (attitude.height + compass.height) // Prevent all clicks from going through to lower layers DeadMouseArea { @@ -45,27 +45,21 @@ Rectangle { QGCPalette { id: qgcPal } QGCAttitudeWidget { - id: attitude - anchors.leftMargin: _topBottomMargin - anchors.left: parent.left - size: _innerRadius * 2 - vehicle: activeVehicle - anchors.verticalCenter: parent.verticalCenter - } - - QGCCompassWidget { - id: compass - anchors.leftMargin: _spacing - anchors.left: attitude.right - size: _innerRadius * 2 - vehicle: activeVehicle - anchors.verticalCenter: parent.verticalCenter + id: attitude + anchors.topMargin : _topBottomMargin + anchors.bottomMargin: _topBottomMargin + anchors.top: parent.top + size: _innerRadius * 2 + vehicle: activeVehicle + anchors.horizontalCenter: parent.horizontalCenter } Item { id: _valuesItem anchors.topMargin: ScreenTools.defaultFontPixelHeight / 4 - anchors.top: parent.bottom + anchors.bottomMargin: ScreenTools.defaultFontPixelHeight / 4 + anchors.top: attitude.bottom + anchors.bottom: compass.top width: parent.width height: _valuesWidget.height visible: widgetRoot.showValues @@ -88,4 +82,14 @@ Rectangle { maxHeight: _availableValueHeight } } + + QGCCompassWidget { + id: compass + anchors.bottom : parent.bottom + anchors.bottomMargin: _topBottomMargin + anchors.topMargin: _topBottomMargin + size: _innerRadius * 2 + vehicle: activeVehicle + anchors.horizontalCenter: parent.horizontalCenter + } } diff --git a/src/Settings/FlyView.SettingsGroup.json b/src/Settings/FlyView.SettingsGroup.json index 4e861daa46f19b7e7465017bbcd6ff9c020f6e4b..ec456ebdfa7b3483f2868f1f51165b5d54d8cb23 100644 --- a/src/Settings/FlyView.SettingsGroup.json +++ b/src/Settings/FlyView.SettingsGroup.json @@ -18,5 +18,11 @@ "shortDescription": "Show/Hide Log Replay status bar", "type": "bool", "defaultValue": false +}, +{ + "name": "alternateInstrumentPanel", + "shortDescription": "Use Vertical Instrument Panel instead of the default one", + "type": "bool", + "defaultValue": false } ] diff --git a/src/Settings/FlyViewSettings.cc b/src/Settings/FlyViewSettings.cc index 68ef5dc807a7dd2827b228a9ec517eeda3ba6ee3..2d3d1f8fa2d723d9b2aa7b0e2530bb0e4558f118 100644 --- a/src/Settings/FlyViewSettings.cc +++ b/src/Settings/FlyViewSettings.cc @@ -20,3 +20,4 @@ DECLARE_SETTINGGROUP(FlyView, "FlyView") DECLARE_SETTINGSFACT(FlyViewSettings, guidedMinimumAltitude) DECLARE_SETTINGSFACT(FlyViewSettings, guidedMaximumAltitude) DECLARE_SETTINGSFACT(FlyViewSettings, showLogReplayStatusBar) +DECLARE_SETTINGSFACT(FlyViewSettings, alternateInstrumentPanel) diff --git a/src/Settings/FlyViewSettings.h b/src/Settings/FlyViewSettings.h index a6dda7be1c00ece306640f1e573f0c85048c309e..ee12163b25d8949299fcffb5b5ec4958eec37e91 100644 --- a/src/Settings/FlyViewSettings.h +++ b/src/Settings/FlyViewSettings.h @@ -22,4 +22,5 @@ public: DEFINE_SETTINGFACT(guidedMinimumAltitude) DEFINE_SETTINGFACT(guidedMaximumAltitude) DEFINE_SETTINGFACT(showLogReplayStatusBar) + DEFINE_SETTINGFACT(alternateInstrumentPanel) }; diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index add796374c6b5a8caacc1f4f02546228df99f805..08abd0d73f3a71d2b9aabba93a14500be2ed8c78 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -461,6 +461,13 @@ Rectangle { property Fact _virtualJoystickCentralized: QGroundControl.settingsManager.appSettings.virtualJoystickCentralized } + FactCheckBox { + text: qsTr("Use Vertical Instrument Panel") + visible: _alternateInstrumentPanel.visible + fact: _alternateInstrumentPanel + + property Fact _alternateInstrumentPanel: QGroundControl.settingsManager.flyViewSettings.alternateInstrumentPanel + } GridLayout { columns: 2