diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index 5f038bf514dc994ef1930ee5d718d578c371a903..796d365ca6cb5a6690a11294cc56a20c5e65720f 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -320,9 +320,6 @@ const QVariantList& FirmwarePlugin::modeIndicators(const Vehicle*) if(_modeIndicatorList.size() == 0) { _modeIndicatorList = QVariantList({ QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/ROIIndicator.qml")), - QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/ArmedIndicator.qml")), - QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/ModeIndicator.qml")), - QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/VTOLModeIndicator.qml")), QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/MultiVehicleSelector.qml")), QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/LinkIndicator.qml")), }); diff --git a/src/QmlControls/FlightModeMenu.qml b/src/QmlControls/FlightModeMenu.qml index 2e3262716788eb5971a3c67b57dfc2067c364652..37a5269ff12f48d6dcd54ddb137851b85d06a2ce 100644 --- a/src/QmlControls/FlightModeMenu.qml +++ b/src/QmlControls/FlightModeMenu.qml @@ -19,7 +19,8 @@ QGCLabel { id: flightModeMenuLabel text: currentVehicle ? currentVehicle.flightMode : qsTr("N/A", "No data to display") - property var currentVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var currentVehicle: QGroundControl.multiVehicleManager.activeVehicle + property real mouseAreaLeftMargin: 0 QGCMenu { id: flightModesMenu @@ -60,8 +61,10 @@ QGCLabel { } MouseArea { - visible: currentVehicle && currentVehicle.flightModeSetAvailable - anchors.fill: parent - onClicked: flightModesMenu.popup() + id: mouseArea + visible: currentVehicle && currentVehicle.flightModeSetAvailable + anchors.leftMargin: mouseAreaLeftMargin + anchors.fill: parent + onClicked: flightModesMenu.popup() } } diff --git a/src/QmlControls/QGCMenu.qml b/src/QmlControls/QGCMenu.qml index 546effbc452965950f888369eacb74973a38fe92..03d6f454fd4584a0994f43d9df011b676aa43a59 100644 --- a/src/QmlControls/QGCMenu.qml +++ b/src/QmlControls/QGCMenu.qml @@ -1,4 +1,4 @@ -// QtQuick.Control 1.x Menu +// Use old QtQuick.Control 1.x Menu to work around bug in new Qml Menu import QtQuick 2.6 import QtQuick.Controls 1.4 diff --git a/src/Vehicle/TrajectoryPoints.cc b/src/Vehicle/TrajectoryPoints.cc index 2e8efc8fcbd3b669b65064498b5a9f4df465d180..bfe08125eee5e5ec365d8901f34e42de8bbe273e 100644 --- a/src/Vehicle/TrajectoryPoints.cc +++ b/src/Vehicle/TrajectoryPoints.cc @@ -59,7 +59,6 @@ void TrajectoryPoints::start(void) void TrajectoryPoints::stop(void) { - qDebug() << "Stop" << _points.count(); disconnect(_vehicle, &Vehicle::coordinateChanged, this, &TrajectoryPoints::_vehicleCoordinateChanged); } diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index 18579c2784d545c4d3aacb45ea10f7e8981c3b65..39cff0c82b7f24a0bbb5ddfccb8136711659763a 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -758,20 +758,20 @@ ApplicationWindow { //------------------------------------------------------------------------- //-- Indicator Popups - function showPopUp(item, dropItem) { - indicatorDropdown.currentIndicator = dropItem - indicatorDropdown.currentItem = item - indicatorDropdown.open() + function showIndicatorPopup(item, dropItem) { + indicatorPopup.currentIndicator = dropItem + indicatorPopup.currentItem = item + indicatorPopup.open() } - function hidePopUp() { - indicatorDropdown.close() - indicatorDropdown.currentItem = null - indicatorDropdown.currentIndicator = null + function hideIndicatorPopup() { + indicatorPopup.close() + indicatorPopup.currentItem = null + indicatorPopup.currentIndicator = null } Popup { - id: indicatorDropdown + id: indicatorPopup padding: ScreenTools.defaultFontPixelWidth * 0.75 modal: true focus: true @@ -786,19 +786,19 @@ ApplicationWindow { Loader { id: loader onLoaded: { - var centerX = mainWindow.contentItem.mapFromItem(indicatorDropdown.currentItem, 0, 0).x - (loader.width * 0.5) - if((centerX + indicatorDropdown.width) > (mainWindow.width - ScreenTools.defaultFontPixelWidth)) { - centerX = mainWindow.width - indicatorDropdown.width - ScreenTools.defaultFontPixelWidth + var centerX = mainWindow.contentItem.mapFromItem(indicatorPopup.currentItem, 0, 0).x - (loader.width * 0.5) + if((centerX + indicatorPopup.width) > (mainWindow.width - ScreenTools.defaultFontPixelWidth)) { + centerX = mainWindow.width - indicatorPopup.width - ScreenTools.defaultFontPixelWidth } - indicatorDropdown.x = centerX + indicatorPopup.x = centerX } } onOpened: { - loader.sourceComponent = indicatorDropdown.currentIndicator + loader.sourceComponent = indicatorPopup.currentIndicator } onClosed: { loader.sourceComponent = null - indicatorDropdown.currentIndicator = null + indicatorPopup.currentIndicator = null } } } diff --git a/src/ui/toolbar/BatteryIndicator.qml b/src/ui/toolbar/BatteryIndicator.qml index 86a1bcc561c3607b33e2bfabfaa39cabac4fdad2..a83a6be07a7fedcd51ec3879314dd661ed83bbed 100644 --- a/src/ui/toolbar/BatteryIndicator.qml +++ b/src/ui/toolbar/BatteryIndicator.qml @@ -120,7 +120,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, batteryInfo) + mainWindow.showIndicatorPopup(_root, batteryInfo) } } } diff --git a/src/ui/toolbar/GPSIndicator.qml b/src/ui/toolbar/GPSIndicator.qml index 1e7c9e75732a65b147556998e1bf102d08b4954c..c0e1936bae54bfe5981b03236f17651711bd9100 100644 --- a/src/ui/toolbar/GPSIndicator.qml +++ b/src/ui/toolbar/GPSIndicator.qml @@ -109,7 +109,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, gpsInfo) + mainWindow.showIndicatorPopup(_root, gpsInfo) } } } diff --git a/src/ui/toolbar/GPSRTKIndicator.qml b/src/ui/toolbar/GPSRTKIndicator.qml index 9ff325c5f260ee4b6d711a9d4befc64d004a5576..4ff4f744c20448648b5160c99864472d61f8bf15 100644 --- a/src/ui/toolbar/GPSRTKIndicator.qml +++ b/src/ui/toolbar/GPSRTKIndicator.qml @@ -109,7 +109,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, gpsInfo) + mainWindow.showIndicatorPopup(_root, gpsInfo) } } } diff --git a/src/ui/toolbar/JoystickIndicator.qml b/src/ui/toolbar/JoystickIndicator.qml index fb050a5d8a0f43e2979eb2c778cfa96ec788c3e0..8d0b096d30673c2746c6ced43d782895727d4418 100644 --- a/src/ui/toolbar/JoystickIndicator.qml +++ b/src/ui/toolbar/JoystickIndicator.qml @@ -91,7 +91,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, joystickInfo) + mainWindow.showIndicatorPopup(_root, joystickInfo) } } } diff --git a/src/ui/toolbar/MainStatusIndicator.qml b/src/ui/toolbar/MainStatusIndicator.qml index 2b8ce97f8726a999a46fb6e13bb17f94470225a1..dc9051986ef35977246b2927400b12d0675ffa6f 100644 --- a/src/ui/toolbar/MainStatusIndicator.qml +++ b/src/ui/toolbar/MainStatusIndicator.qml @@ -16,57 +16,21 @@ import QGroundControl.MultiVehicleManager 1.0 import QGroundControl.ScreenTools 1.0 import QGroundControl.Palette 1.0 -Item { - id: _root - Layout.preferredWidth: mainStatusLabel.contentWidth + ScreenTools.defaultFontPixelWidth +RowLayout { + id: _root + spacing: 0 - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - property real _margins: ScreenTools.defaultFontPixelWidth - - Component { - id: mainStatusInfo - - Rectangle { - width: mainLayout.width + (_margins * 2) - height: mainLayout.height + (_margins * 2) - radius: ScreenTools.defaultFontPixelHeight * 0.5 - color: qgcPal.window - border.color: qgcPal.text - - GridLayout { - id: mainLayout - anchors.margins: _margins - anchors.top: parent.top - anchors.left: parent.left - rowSpacing: ScreenTools.defaultFontPixelWidth / 2 - columnSpacing: rowSpacing - rows: _activeVehicle.sysStatusSensorInfo.sensorNames.length - flow: GridLayout.TopToBottom - - Repeater { - model: _activeVehicle.sysStatusSensorInfo.sensorNames - - QGCLabel { - text: modelData - } - } - - Repeater { - model: _activeVehicle.sysStatusSensorInfo.sensorStatus - - QGCLabel { - text: modelData - } - } - } - } - } + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var _vehicleInAir: _activeVehicle ? _activeVehicle.flying || _activeVehicle.landing : false + property bool _vtolInFWDFlight: _activeVehicle ? _activeVehicle.vtolInFwdFlight : false + property bool _armed: _activeVehicle ? _activeVehicle.armed : false + property real _margins: ScreenTools.defaultFontPixelWidth + property real _spacing: ScreenTools.defaultFontPixelWidth / 2 QGCLabel { - id: mainStatusLabel - text: mainStatusText() - font.pointSize: ScreenTools.largeFontPointSize - anchors.verticalCenter: parent.verticalCenter + id: mainStatusLabel + text: mainStatusText() + font.pointSize: _vehicleInAir ? ScreenTools.defaultFontPointSize : ScreenTools.largeFontPointSize property string _commLostText: qsTr("Communication Lost") property string _readyToFlyText: qsTr("Ready To Fly") @@ -117,13 +81,156 @@ Item { return mainStatusLabel._disconnectedText } } + + MouseArea { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + height: _root.height + enabled: _activeVehicle + onClicked: mainWindow.showIndicatorPopup(mainStatusLabel, sensorStatusInfoComponent) + } + } + + Item { + width: ScreenTools.defaultFontPixelWidth + height: 1 + } + + QGCColoredImage { + id: flightModeIcon + width: height + height: ScreenTools.defaultFontPixelHeight * 0.75 + fillMode: Image.PreserveAspectFit + mipmap: true + color: qgcPal.text + source: "/qmlimages/FlightModesComponentIcon.png" + visible: _activeVehicle + } + + Item { + Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * (_vehicleInAir ? ScreenTools.largeFontPointRatio : 1) / 3 + height: 1 + visible: flightModeMenu.visible + } + + FlightModeMenu { + id: flightModeMenu + Layout.preferredHeight: _root.height + verticalAlignment: Text.AlignVCenter + font.pointSize: _vehicleInAir ? ScreenTools.largeFontPointSize : ScreenTools.defaultFontPointSize + mouseAreaLeftMargin: -(flightModeMenu.x - flightModeIcon.x) + visible: _activeVehicle + } + + Item { + Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * ScreenTools.largeFontPointRatio + height: 1 + visible: vtolModeLabel.visible } - MouseArea { - anchors.fill: parent - enabled: _activeVehicle - onClicked: { - mainWindow.showPopUp(_root, mainStatusInfo) + QGCLabel { + id: vtolModeLabel + Layout.preferredHeight: _root.height + verticalAlignment: Text.AlignVCenter + text: _vtolInFWDFlight ? qsTr("FW(vtol)") : qsTr("MR(vtol)") + font.pointSize: ScreenTools.largeFontPointSize + visible: _activeVehicle ? _activeVehicle.vtol && _vehicleInAir : false + + QGCMouseArea { + anchors.fill: parent + onClicked: mainWindow.showIndicatorPopup(vtolModeLabel, vtolTransitionComponent) + } + } + + Component { + id: sensorStatusInfoComponent + + Rectangle { + width: mainLayout.width + (_margins * 2) + height: mainLayout.height + (_margins * 2) + radius: ScreenTools.defaultFontPixelHeight * 0.5 + color: qgcPal.window + border.color: qgcPal.text + + ColumnLayout { + id: mainLayout + anchors.margins: _margins + anchors.top: parent.top + anchors.left: parent.left + spacing: _spacing + + QGCLabel { + Layout.alignment: Qt.AlignHCenter + text: qsTr("Sensor Status") + } + + GridLayout { + rowSpacing: _spacing + columnSpacing: _spacing + rows: _activeVehicle.sysStatusSensorInfo.sensorNames.length + flow: GridLayout.TopToBottom + + Repeater { + model: _activeVehicle.sysStatusSensorInfo.sensorNames + + QGCLabel { + text: modelData + } + } + + Repeater { + model: _activeVehicle.sysStatusSensorInfo.sensorStatus + + QGCLabel { + text: modelData + } + } + } + + QGCButton { + Layout.alignment: Qt.AlignHCenter + text: _armed ? qsTr("Disarm") : qsTr("Arm") + onClicked: { + if (_armed) { + mainWindow.disarmVehicleRequest() + } else { + mainWindow.armVehicleRequest() + } + mainWindow.hideIndicatorPopup() + } + } + } + } + } + + Component { + id: vtolTransitionComponent + + Rectangle { + width: mainLayout.width + (_margins * 2) + height: mainLayout.height + (_margins * 2) + radius: ScreenTools.defaultFontPixelHeight * 0.5 + color: qgcPal.window + border.color: qgcPal.text + + QGCButton { + id: mainLayout + anchors.margins: _margins + anchors.top: parent.top + anchors.left: parent.left + text: _vtolInFWDFlight ? qsTr("Transition to Multi-Rotor") : qsTr("Transition to Fixed Wing") + + onClicked: { + if (_vtolInFWDFlight) { + mainWindow.vtolTransitionToMRFlightRequest() + } else { + mainWindow.vtolTransitionToFwdFlightRequest() + } + mainWindow.hideIndicatorPopup() + } + } } } } + diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index bbe9633cdb9f1ca61d208ecf742cd67d41ade1c9..2f2152485069115c62fdf4a74edf3fe6b2c66dc7 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -87,19 +87,18 @@ Rectangle { spacing: ScreenTools.defaultFontPixelWidth / 2 QGCToolBarButton { - id: currentButton - Layout.fillHeight: true - onClicked: viewSelectDrawer.visible = true + id: currentButton + Layout.preferredHeight: viewButtonRow.height + onClicked: viewSelectDrawer.visible = true } MainStatusIndicator { - Layout.fillHeight: true - visible: currentToolbar === flyViewToolbar + Layout.preferredHeight: viewButtonRow.height + visible: currentToolbar === flyViewToolbar } QGCButton { id: disconnectButton - Layout.alignment: Qt.AlignVCenter text: qsTr("Disconnect") onClicked: _activeVehicle.disconnectInactiveVehicle() visible: _activeVehicle && _communicationLost && currentToolbar === flyViewToolbar diff --git a/src/ui/toolbar/RCRSSIIndicator.qml b/src/ui/toolbar/RCRSSIIndicator.qml index d76381962275aaceccd5c5512aa2816996de3962..695ee97d0f70c60a5ec391f2b746eadbc6d07c01 100644 --- a/src/ui/toolbar/RCRSSIIndicator.qml +++ b/src/ui/toolbar/RCRSSIIndicator.qml @@ -95,7 +95,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, rcRSSIInfo) + mainWindow.showIndicatorPopup(_root, rcRSSIInfo) } } } diff --git a/src/ui/toolbar/ROIIndicator.qml b/src/ui/toolbar/ROIIndicator.qml index c6f52b97e2dbef95dcbfcc1f5855d10acd242ba8..3da3a8d41e4cb11293a9f8936a7a3b227e188666 100644 --- a/src/ui/toolbar/ROIIndicator.qml +++ b/src/ui/toolbar/ROIIndicator.qml @@ -61,7 +61,7 @@ Item { onClicked: { if(activeVehicle) activeVehicle.stopGuidedModeROI() - mainWindow.hidePopUp() + mainWindow.hideIndicatorPopup() } } } @@ -83,7 +83,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, roiInfo) + mainWindow.showIndicatorPopup(_root, roiInfo) } } } diff --git a/src/ui/toolbar/TelemetryRSSIIndicator.qml b/src/ui/toolbar/TelemetryRSSIIndicator.qml index 4e869ec2a76131a01ce7817f9793651ab9006c88..9642041d205c96e6f8fd53ac933d1f5292614b0a 100644 --- a/src/ui/toolbar/TelemetryRSSIIndicator.qml +++ b/src/ui/toolbar/TelemetryRSSIIndicator.qml @@ -86,7 +86,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - mainWindow.showPopUp(_root, telemRSSIInfo) + mainWindow.showIndicatorPopup(_root, telemRSSIInfo) } } }