From 6e280eebfb36dcfbd3c57406b7b518f4a5c95095 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer <don@thegagnes.com> Date: Thu, 6 Aug 2020 14:10:00 -0700 Subject: [PATCH] View change done using Drawer --- src/QmlControls/QGCControlDebug.qml | 5 +- src/QmlControls/SubMenuButton.qml | 3 +- src/Vehicle/Vehicle.cc | 58 +++++++------ src/ui/MainRootWindow.qml | 158 ++++++++++++++++++++++++++++++++++++ src/ui/toolbar/MainToolBar.qml | 130 ++--------------------------- 5 files changed, 201 insertions(+), 153 deletions(-) diff --git a/src/QmlControls/QGCControlDebug.qml b/src/QmlControls/QGCControlDebug.qml index 60227c4..32e47d9 100644 --- a/src/QmlControls/QGCControlDebug.qml +++ b/src/QmlControls/QGCControlDebug.qml @@ -16,10 +16,11 @@ Rectangle { color: "transparent" property string name - property color borderColor + property color borderColor: "red" function logEverything() { - console.log(qsTr("%1 x:%2 y:%3 width:%4 height:%5 visible: %6 enabled: %7 z:%8 parent:%9 implicitWidth/Height:%10:%11", "Do not translate").arg(name).arg(parent.x).arg(parent.y).arg(parent.width).arg(parent.height).arg(parent.visible).arg(parent.enabled).arg(parent.z).arg(parent.parent)) + console.log(qsTr("%1 x:%2 y:%3 width:%4 height:%5 visible:%6 enabled:%7 z:%8 parent:%9 implicitWidth/Height:%10:%11", "Do not translate") + .arg(name).arg(parent.x).arg(parent.y).arg(parent.width).arg(parent.height).arg(parent.visible).arg(parent.enabled).arg(parent.z).arg(parent.parent).arg(implicitHeight).arg(implicitWidth)) } Component.onCompleted: logEverything() diff --git a/src/QmlControls/SubMenuButton.qml b/src/QmlControls/SubMenuButton.qml index 23b75be..451964f 100644 --- a/src/QmlControls/SubMenuButton.qml +++ b/src/QmlControls/SubMenuButton.qml @@ -13,6 +13,7 @@ Button { id: _rootButton property bool setupComplete: true ///< true: setup complete indicator shows as completed property bool setupIndicator: true ///< true: show setup complete indicator + property var imageColor: undefined property string imageResource: "/qmlimages/subMenuButtonImage.png" ///< Button image property size sourceSize: Qt.size(ScreenTools.defaultFontPixelHeight * 2, ScreenTools.defaultFontPixelHeight * 2) @@ -49,7 +50,7 @@ Button { height: ScreenTools.defaultFontPixelHeight * 2 fillMode: Image.PreserveAspectFit mipmap: true - color: control.setupComplete ? qgcPal.button : "red" + color: imageColor ? imageColor : (control.setupComplete ? qgcPal.button : "red") source: control.imageResource sourceSize: _rootButton.sourceSize } diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 6af9dc2..681ab7f 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -3584,36 +3584,40 @@ QStringList Vehicle::unhealthySensors() const struct sensorInfo_s { uint32_t bit; - const char* sensorName; + QString sensorName; }; static const sensorInfo_s rgSensorInfo[] = { - { MAV_SYS_STATUS_SENSOR_3D_GYRO, "Gyro" }, - { MAV_SYS_STATUS_SENSOR_3D_ACCEL, "Accelerometer" }, - { MAV_SYS_STATUS_SENSOR_3D_MAG, "Magnetometer" }, - { MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE, "Absolute pressure" }, - { MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE, "Differential pressure" }, - { MAV_SYS_STATUS_SENSOR_GPS, "GPS" }, - { MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW, "Optical flow" }, - { MAV_SYS_STATUS_SENSOR_VISION_POSITION, "Computer vision position" }, - { MAV_SYS_STATUS_SENSOR_LASER_POSITION, "Laser based position" }, - { MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH, "External ground truth" }, - { MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL, "Angular rate control" }, - { MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION, "Attitude stabilization" }, - { MAV_SYS_STATUS_SENSOR_YAW_POSITION, "Yaw position" }, - { MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL, "Z/altitude control" }, - { MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL, "X/Y position control" }, - { MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS, "Motor outputs / control" }, - { MAV_SYS_STATUS_SENSOR_RC_RECEIVER, "RC receiver" }, - { MAV_SYS_STATUS_SENSOR_3D_GYRO2, "Gyro 2" }, - { MAV_SYS_STATUS_SENSOR_3D_ACCEL2, "Accelerometer 2" }, - { MAV_SYS_STATUS_SENSOR_3D_MAG2, "Magnetometer 2" }, - { MAV_SYS_STATUS_GEOFENCE, "GeoFence" }, - { MAV_SYS_STATUS_AHRS, "AHRS" }, - { MAV_SYS_STATUS_TERRAIN, "Terrain" }, - { MAV_SYS_STATUS_REVERSE_MOTOR, "Motors reversed" }, - { MAV_SYS_STATUS_LOGGING, "Logging" }, - { MAV_SYS_STATUS_SENSOR_BATTERY, "Battery" }, + { MAV_SYS_STATUS_SENSOR_3D_GYRO, tr("Gyro") }, + { MAV_SYS_STATUS_SENSOR_3D_ACCEL, tr("Accelerometer") }, + { MAV_SYS_STATUS_SENSOR_3D_MAG, tr("Magnetometer") }, + { MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE, tr("Absolute pressure") }, + { MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE, tr("Differential pressure") }, + { MAV_SYS_STATUS_SENSOR_GPS, tr("GPS") }, + { MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW, tr("Optical flow") }, + { MAV_SYS_STATUS_SENSOR_VISION_POSITION, tr("Computer vision position") }, + { MAV_SYS_STATUS_SENSOR_LASER_POSITION, tr("Laser based position") }, + { MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH, tr("External ground truth") }, + { MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL, tr("Angular rate control") }, + { MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION, tr("Attitude stabilization") }, + { MAV_SYS_STATUS_SENSOR_YAW_POSITION, tr("Yaw position") }, + { MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL, tr("Z/altitude control") }, + { MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL, tr("X/Y position control") }, + { MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS, tr("Motor outputs / control") }, + { MAV_SYS_STATUS_SENSOR_RC_RECEIVER, tr("RC receiver") }, + { MAV_SYS_STATUS_SENSOR_3D_GYRO2, tr("Gyro 2") }, + { MAV_SYS_STATUS_SENSOR_3D_ACCEL2, tr("Accelerometer 2") }, + { MAV_SYS_STATUS_SENSOR_3D_MAG2, tr("Magnetometer 2") }, + { MAV_SYS_STATUS_GEOFENCE, tr("GeoFence") }, + { MAV_SYS_STATUS_AHRS, tr("AHRS") }, + { MAV_SYS_STATUS_TERRAIN, tr("Terrain") }, + { MAV_SYS_STATUS_REVERSE_MOTOR, tr("Motors reversed") }, + { MAV_SYS_STATUS_LOGGING, tr("Logging") }, + { MAV_SYS_STATUS_SENSOR_BATTERY, tr("Battery") }, + { MAV_SYS_STATUS_SENSOR_PROXIMITY, tr("Proximity") }, + { MAV_SYS_STATUS_SENSOR_SATCOM, tr("Satellite Communication") }, + { MAV_SYS_STATUS_PREARM_CHECK, tr("Pre-Arm Check") }, + { MAV_SYS_STATUS_OBSTACLE_AVOIDANCE, tr("Avoidance/collision prevention") }, }; for (size_t i=0; i<sizeof(rgSensorInfo)/sizeof(sensorInfo_s); i++) { diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index bc61549..1efee82 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -325,6 +325,164 @@ ApplicationWindow { visible: QGroundControl.settingsManager.flyViewSettings.showLogReplayStatusBar.rawValue } + Drawer { + id: viewSelectDrawer + height: mainWindow.height + edge: Qt.LeftEdge + interactive: true + dragMargin: 0 + visible: false + + property var _mainWindow: mainWindow + property real _toolButtonHeight: ScreenTools.defaultFontPixelHeight * 3 + + Rectangle { + width: mainLayout.width + (mainLayout.anchors.margins * 2) + height: parent.height + color: qgcPal.window + + QGCFlickable { + anchors.top: parent.top + anchors.bottom: qgcVersionLayout.top + anchors.left: parent.left + anchors.right: parent.right + contentHeight: mainLayout.height + (mainLayout.anchors.margins * 2) + flickableDirection: QGCFlickable.VerticalFlick + + ColumnLayout { + id: mainLayout + anchors.margins: ScreenTools.defaultFontPixelWidth + anchors.left: parent.left + anchors.top: parent.top + spacing: ScreenTools.defaultFontPixelWidth + + SubMenuButton { + id: flyButton + height: viewSelectDrawer._toolButtonHeight + Layout.fillWidth: true + text: qsTr("Fly View") + imageResource: "/qmlimages/PaperPlane.svg" + imageColor: qgcPal.text + onClicked: { + if (toolbar.viewButtonClicked(this)) { + mainWindow.showFlyView() + } + } + + } + + SubMenuButton { + id: planButton + height: viewSelectDrawer._toolButtonHeight + Layout.fillWidth: true + text: qsTr("Plan View") + imageResource: "/qmlimages/Plan.svg" + imageColor: qgcPal.text + onClicked: { + if (toolbar.viewButtonClicked(this)) { + mainWindow.showPlanView() + } + } + } + + SubMenuButton { + id: analyzeButton + height: viewSelectDrawer._toolButtonHeight + Layout.fillWidth: true + text: qsTr("Analyze Tools") + imageResource: "/qmlimages/Analyze.svg" + imageColor: qgcPal.text + visible: QGroundControl.corePlugin.showAdvancedUI + onClicked: { + if (toolbar.viewButtonClicked(this)) { + mainWindow.showAnalyzeView() + } + } + } + + SubMenuButton { + id: setupButton + height: viewSelectDrawer._toolButtonHeight + Layout.fillWidth: true + text: qsTr("Vehicle Setup") + imageColor: qgcPal.text + imageResource: "/qmlimages/Gears.svg" + onClicked: { + if (toolbar.viewButtonClicked(this)) { + mainWindow.showSetupView() + } + } + } + + SubMenuButton { + id: settingsButton + height: viewSelectDrawer._toolButtonHeight + Layout.fillWidth: true + text: qsTr("Application Settings") + imageResource: "/res/QGCLogoFull" + imageColor: "transparent" + visible: !QGroundControl.corePlugin.options.combineSettingsAndSetup + onClicked: { + if (toolbar.viewButtonClicked(this)) { + mainWindow.showSettingsView() + } + } + } + } + } + + ColumnLayout { + id: qgcVersionLayout + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + spacing: 0 + + QGCLabel { + text: qsTr("%1 Version").arg(QGroundControl.appName) + font.pointSize: ScreenTools.smallFontPointSize + wrapMode: QGCLabel.WordWrap + Layout.maximumWidth: parent.width + Layout.alignment: Qt.AlignHCenter + } + QGCLabel { + text: QGroundControl.qgcVersion + font.pointSize: ScreenTools.smallFontPointSize + wrapMode: QGCLabel.WrapAnywhere + Layout.maximumWidth: parent.width + Layout.alignment: Qt.AlignHCenter + } + } + + QGCMouseArea { + anchors.fill: qgcVersionLayout + + onClicked: { + if (mouse.modifiers & Qt.ShiftModifier) { + QGroundControl.corePlugin.showTouchAreas = !QGroundControl.corePlugin.showTouchAreas + } else { + if(!QGroundControl.corePlugin.showAdvancedUI) { + advancedModeConfirmation.open() + } else { + QGroundControl.corePlugin.showAdvancedUI = false + } + } + } + + MessageDialog { + id: advancedModeConfirmation + title: qsTr("Advanced Mode") + text: QGroundControl.corePlugin.showAdvancedUIMessage + standardButtons: StandardButton.Yes | StandardButton.No + onYes: { + QGroundControl.corePlugin.showAdvancedUI = true + advancedModeConfirmation.close() + } + } + } + } + } + //------------------------------------------------------------------------- /// Fly View FlyView { diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index 2519892..47d480a 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -32,16 +32,15 @@ Rectangle { property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property bool _communicationLost: _activeVehicle ? _activeVehicle.connectionLost : false - Component.onCompleted: _viewButtonClicked(flyButton) + Component.onCompleted: toolbar.viewButtonClicked(flyButton) - function _viewButtonClicked(button) { + function viewButtonClicked(button) { if (mainWindow.preventViewSwitch()) { return false } - viewButtonSelectRow.visible = false - buttonSelectHideTimer.stop() - currentButton.icon.source = button.icon.source - currentButton.logo = button.logo + viewSelectDrawer.visible = false + currentButton.icon.source = button.imageResource + currentButton.logo = button.imageColor == "transparent" return true } @@ -50,7 +49,7 @@ Rectangle { target: setupWindow onVisibleChanged: { if (setupWindow.visible) { - _viewButtonClicked(setupButton) + toolbar.viewButtonClicked(setupButton) } } } @@ -77,122 +76,7 @@ Rectangle { QGCToolBarButton { id: currentButton Layout.fillHeight: true - visible: !viewButtonSelectRow.visible - - onClicked: { - viewButtonSelectRow.visible = !viewButtonSelectRow.visible - if (viewButtonSelectRow.visible) { - buttonSelectHideTimer.start() - } else { - buttonSelectHideTimer.stop() - } - } - } - - //--------------------------------------------- - // Toolbar Row - RowLayout { - id: viewButtonSelectRow - Layout.fillHeight: true - spacing: 0 - visible: false - - Timer { - id: buttonSelectHideTimer - interval: 5000 - repeat: false - onTriggered: viewButtonSelectRow.visible = false - } - - QGCToolBarButton { - id: settingsButton - Layout.fillHeight: true - icon.source: "/res/QGCLogoFull" - logo: true - visible: !QGroundControl.corePlugin.options.combineSettingsAndSetup - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showSettingsView() - } - } - } - - QGCToolBarButton { - id: setupButton - Layout.fillHeight: true - icon.source: "/qmlimages/Gears.svg" - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showSetupView() - } - } - } - - QGCToolBarButton { - id: planButton - Layout.fillHeight: true - icon.source: "/qmlimages/Plan.svg" - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showPlanView() - } - } - } - - QGCToolBarButton { - id: flyButton - Layout.fillHeight: true - icon.source: "/qmlimages/PaperPlane.svg" - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showFlyView() - // Easter Egg mechanism - _clickCount++ - eggTimer.restart() - if (_clickCount == 5) { - if(!QGroundControl.corePlugin.showAdvancedUI) { - advancedModeConfirmation.open() - } else { - QGroundControl.corePlugin.showAdvancedUI = false - } - } else if (_clickCount == 7) { - QGroundControl.corePlugin.showTouchAreas = !QGroundControl.corePlugin.showTouchAreas - } - } - } - - property int _clickCount: 0 - - Timer { - id: eggTimer - interval: 1000 - repeat: false - onTriggered: parent._clickCount = 0 - } - - MessageDialog { - id: advancedModeConfirmation - title: qsTr("Advanced Mode") - text: QGroundControl.corePlugin.showAdvancedUIMessage - standardButtons: StandardButton.Yes | StandardButton.No - onYes: { - QGroundControl.corePlugin.showAdvancedUI = true - advancedModeConfirmation.close() - } - } - } - - QGCToolBarButton { - id: analyzeButton - Layout.fillHeight: true - icon.source: "/qmlimages/Analyze.svg" - visible: QGroundControl.corePlugin.showAdvancedUI - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showAnalyzeView() - } - } - } + onClicked: viewSelectDrawer.visible = true } }