diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 025b53fc0f2d1d3b43521b2a03408de8359b708a..35ab7cff07b8db2d0ce60959ccf970150e2fdabb 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -9,7 +9,6 @@ src/ui/toolbar/GPSRTKIndicator.qml src/ui/toolbar/JoystickIndicator.qml src/ui/toolbar/LinkIndicator.qml - src/ui/toolbar/MainToolBar.qml src/ui/toolbar/MainToolBarIndicators.qml src/ui/toolbar/MessageIndicator.qml src/ui/toolbar/ModeIndicator.qml @@ -107,6 +106,7 @@ src/QmlControls/JoystickThumbPad.qml src/QmlControls/KMLOrSHPFileDialog.qml src/QmlControls/LogReplayStatusBar.qml + src/ui/toolbar/MainToolBar.qml src/QmlControls/MainWindowSavedState.qml src/QmlControls/MAVLinkChart.qml src/QmlControls/MAVLinkMessageButton.qml @@ -179,7 +179,6 @@ src/PlanView/SurveyMapVisual.qml src/PlanView/TerrainStatus.qml src/PlanView/TakeoffItemMapVisual.qml - src/ui/toolbar/ToolBarBase.qml src/QmlControls/ToolStrip.qml src/PlanView/TransectStyleComplexItemStats.qml src/QmlControls/VehicleRotationCal.qml diff --git a/src/QmlControls/QGroundControl/Controls/qmldir b/src/QmlControls/QGroundControl/Controls/qmldir index 03cf60439a526126b5abcf7d14c4646712f82227..f73b2dc99d97ad917d2bf07a4bba8981823f064b 100644 --- a/src/QmlControls/QGroundControl/Controls/qmldir +++ b/src/QmlControls/QGroundControl/Controls/qmldir @@ -31,6 +31,7 @@ InstrumentValueEditDialog 1.0 InstrumentValueEditDialog.qml JoystickThumbPad 1.0 JoystickThumbPad.qml KMLOrSHPFileDialog 1.0 KMLOrSHPFileDialog.qml LogReplayStatusBar 1.0 LogReplayStatusBar.qml +MainToolBar 1.0 MainToolBar.qml MainWindowSavedState 1.0 MainWindowSavedState.qml MAVLinkMessageButton 1.0 MAVLinkMessageButton.qml MissionCommandDialog 1.0 MissionCommandDialog.qml @@ -101,7 +102,6 @@ SurveyMapVisuals 1.0 SurveyMapVisuals.qml TerrainStatus 1.0 TerrainStatus.qml TransectStyleComplexItemStats 1.0 TransectStyleComplexItemStats.qml TransectStyleMapVisuals 1.0 TransectStyleMapVisuals.qml -ToolBarBase 1.0 ToolBarBase.qml ToolStrip 1.0 ToolStrip.qml VehicleRotationCal 1.0 VehicleRotationCal.qml VehicleSummaryRow 1.0 VehicleSummaryRow.qml diff --git a/src/ui/MainRootWindow.qml b/src/ui/MainRootWindow.qml index 010ec26608ebfc9f379ade5fd7ef5c531e8403ac..a394cab4276d5565e0e43ecd43574e3e45c8427d 100644 --- a/src/ui/MainRootWindow.qml +++ b/src/ui/MainRootWindow.qml @@ -77,8 +77,6 @@ ApplicationWindow { /// Current active Vehicle property var activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - /// Indicates communication with vehicle is list (no heartbeats) - property bool communicationLost: activeVehicle ? activeVehicle.connectionLost : false property string formatedMessage: activeVehicle ? activeVehicle.formatedMessage : "" /// Indicates usable height between toolbar and footer property real availableHeight: mainWindow.height - mainWindow.header.height - mainWindow.footer.height @@ -125,47 +123,40 @@ ApplicationWindow { return _rgPreventViewSwitch[_rgPreventViewSwitch.length - 1] } - function viewSwitch(isPlanView, showModeIndicators) { + function viewSwitch(currentToolbar) { settingsWindow.visible = false setupWindow.visible = false analyzeWindow.visible = false flightView.visible = false planViewLoader.visible = false - var indicatorSource - if (isPlanView) { - indicatorSource = "qrc:/qml/PlanToolBarIndicators.qml" - } else { - indicatorSource = "qrc:/toolbar/MainToolBarIndicators.qml" - } - toolbar.item.indicatorSource = indicatorSource - toolbar.item.showModeIndicators = showModeIndicators + toolbar.currentToolbar = currentToolbar } function showFlyView() { if (!flightView.visible) { mainWindow.showPreFlightChecklistIfNeeded() } - viewSwitch(false, true) + viewSwitch(toolbar.flyViewToolbar) flightView.visible = true } function showPlanView() { - viewSwitch(true, false) + viewSwitch(toolbar.planViewToolbar) planViewLoader.visible = true } function showAnalyzeView() { - viewSwitch(false, false) + viewSwitch(toolbar.simpleToolbar) analyzeWindow.visible = true } function showSetupView() { - viewSwitch(false, false) + viewSwitch(toolbar.simpleToolbar) setupWindow.visible = true } function showSettingsView() { - viewSwitch(false, false) + viewSwitch(toolbar.simpleToolbar) settingsWindow.visible = true } @@ -354,29 +345,10 @@ ApplicationWindow { //------------------------------------------------------------------------- /// Toolbar - header: ToolBar { - height: ScreenTools.toolbarHeight - visible: !QGroundControl.videoManager.fullScreen - background: Rectangle { - color: qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark - } - Loader { - id: toolbar - anchors.fill: parent - source: "qrc:/toolbar/MainToolBar.qml" - //-- Toggle Full Screen / Windowed - MouseArea { - anchors.fill: parent - enabled: !ScreenTools.isMobile - onDoubleClicked: { - if(mainWindow.visibility === Window.Windowed) { - mainWindow.showFullScreen() - } else { - mainWindow.showNormal() - } - } - } - } + header: MainToolBar { + id: toolbar + height: ScreenTools.toolbarHeight + visible: !QGroundControl.videoManager.fullScreen } footer: LogReplayStatusBar { diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index 284de5986dd014ca204a5a727fcf4a6bf354ed8c..25198925fe9e5826f449503af3af0f8bce01d170 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -19,15 +19,18 @@ import QGroundControl.MultiVehicleManager 1.0 import QGroundControl.ScreenTools 1.0 import QGroundControl.Controllers 1.0 -Item { - id: _root +Rectangle { + id: _root + color: qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark - property alias indicatorSource: indicatorLoader.source - property alias showModeIndicators: indicatorLoader.showModeIndicators + property int currentToolbar: flyViewToolbar - // FIXME: Reaching up for communicationLost? + readonly property int flyViewToolbar: 0 + readonly property int planViewToolbar: 1 + readonly property int simpleToolbar: 2 - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property bool _communicationLost: _activeVehicle ? _activeVehicle.connectionLost : false Component.onCompleted: _viewButtonClicked(flyButton) @@ -74,6 +77,7 @@ Item { QGCToolBarButton { id: currentButton Layout.fillHeight: true + visible: !viewButtonSelectRow.visible onClicked: { viewButtonSelectRow.visible = !viewButtonSelectRow.visible @@ -100,19 +104,12 @@ Item { onTriggered: viewButtonSelectRow.visible = false } - Rectangle { - Layout.margins: ScreenTools.defaultFontPixelHeight / 2 - Layout.fillHeight: true - width: 1 - color: qgcPal.text - } - QGCToolBarButton { id: settingsButton Layout.fillHeight: true icon.source: "/res/QGCLogoFull" logo: true - visible: currentButton.icon.source !== icon.source && !QGroundControl.corePlugin.options.combineSettingsAndSetup + visible: !QGroundControl.corePlugin.options.combineSettingsAndSetup onClicked: { if (_viewButtonClicked(this)) { mainWindow.showSettingsView() @@ -124,7 +121,6 @@ Item { id: setupButton Layout.fillHeight: true icon.source: "/qmlimages/Gears.svg" - visible: currentButton.icon.source !== icon.source onClicked: { if (_viewButtonClicked(this)) { mainWindow.showSetupView() @@ -136,7 +132,6 @@ Item { id: planButton Layout.fillHeight: true icon.source: "/qmlimages/Plan.svg" - visible: currentButton.icon.source !== icon.source onClicked: { if (_viewButtonClicked(this)) { mainWindow.showPlanView() @@ -148,7 +143,6 @@ Item { id: flyButton Layout.fillHeight: true icon.source: "/qmlimages/PaperPlane.svg" - visible: currentButton.icon.source !== icon.source onClicked: { if (_viewButtonClicked(this)) { mainWindow.showFlyView() @@ -192,7 +186,7 @@ Item { id: analyzeButton Layout.fillHeight: true icon.source: "/qmlimages/Analyze.svg" - visible: currentButton.icon.source !== icon.source && QGroundControl.corePlugin.showAdvancedUI + visible: QGroundControl.corePlugin.showAdvancedUI onClicked: { if (_viewButtonClicked(this)) { mainWindow.showAnalyzeView() @@ -230,6 +224,7 @@ Item { anchors.bottom: parent.bottom userSettingsGroup: toolbarUserSettingsGroup defaultSettingsGroup: toolbarDefaultSettingsGroup + visible: currentToolbar !== planViewToolbar QGCMouseArea { anchors.fill: parent @@ -247,17 +242,18 @@ Item { anchors.left: valueArea.right width: 1 color: qgcPal.text + visible: currentToolbar == flyViewToolbar } Loader { id: indicatorLoader - anchors.leftMargin: ScreenTools.defaultFontPixelHeight / 2 - anchors.left: separator2.right + anchors.leftMargin: currentToolbar !== planViewToolbar ? ScreenTools.defaultFontPixelHeight / 2 : 0 + anchors.left: currentToolbar !== planViewToolbar ? separator2.right : parent.left anchors.top: parent.top anchors.bottom: parent.bottom - source: "qrc:/toolbar/MainToolBarIndicators.qml" - - property bool showModeIndicators: true + source: currentToolbar === flyViewToolbar ? + "qrc:/toolbar/MainToolBarIndicators.qml" : + (currentToolbar == planViewToolbar ? "qrc:/qml/PlanToolBarIndicators.qml" : "") } } @@ -268,7 +264,7 @@ Item { anchors.top: parent.top anchors.bottom: parent.bottom anchors.margins: ScreenTools.defaultFontPixelHeight * 0.66 - visible: _activeVehicle && !communicationLost && x > (toolsFlickable.x + toolsFlickable.contentWidth + ScreenTools.defaultFontPixelWidth) + visible: currentToolbar !== planViewToolbar && _activeVehicle && !_communicationLost && x > (toolsFlickable.x + toolsFlickable.contentWidth + ScreenTools.defaultFontPixelWidth) fillMode: Image.PreserveAspectFit source: _outdoorPalette ? _brandImageOutdoor : _brandImageIndoor mipmap: true @@ -363,7 +359,7 @@ Item { font.pointSize: ScreenTools.mediumFontPointSize font.family: ScreenTools.demiboldFontFamily color: qgcPal.colorRed - visible: !_activeVehicle + visible: currentToolbar !== planViewToolbar && !_activeVehicle } //------------------------------------------------------------------------- @@ -376,7 +372,7 @@ Item { anchors.right: parent.right layoutDirection: Qt.RightToLeft spacing: ScreenTools.defaultFontPixelWidth - visible: _activeVehicle && communicationLost + visible: currentToolbar !== planViewToolbar && _activeVehicle && _communicationLost QGCButton { id: disconnectButton diff --git a/src/ui/toolbar/MainToolBarIndicators.qml b/src/ui/toolbar/MainToolBarIndicators.qml index cb9b7125058da15696f831f3ab62eebda0d5c8ae..14342445743a8e20a39b9f715796f97be4d6f6d5 100644 --- a/src/ui/toolbar/MainToolBarIndicators.qml +++ b/src/ui/toolbar/MainToolBarIndicators.qml @@ -21,9 +21,6 @@ Row { anchors.margins: _toolIndicatorMargins spacing: ScreenTools.defaultFontPixelWidth * 1.5 - // This property should come in from the Loader - //property bool showModeIndicators: true - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle property real _toolIndicatorMargins: ScreenTools.defaultFontPixelHeight * 0.66 @@ -49,7 +46,7 @@ Row { } Repeater { - model: _activeVehicle && showModeIndicators ? _activeVehicle.modeIndicators : [] + model: _activeVehicle ? _activeVehicle.modeIndicators : [] Loader { anchors.top: parent.top anchors.bottom: parent.bottom diff --git a/src/ui/toolbar/ToolBarBase.qml b/src/ui/toolbar/ToolBarBase.qml deleted file mode 100644 index 4294a1c3071ea4070adf911725f22bd34e35143b..0000000000000000000000000000000000000000 --- a/src/ui/toolbar/ToolBarBase.qml +++ /dev/null @@ -1,415 +0,0 @@ -/**************************************************************************** - * - * (c) 2009-2020 QGROUNDCONTROL PROJECT - * - * QGroundControl is licensed according to the terms in the file - * COPYING.md in the root of the source code directory. - * - ****************************************************************************/ - -import QtQuick 2.11 -import QtQuick.Controls 2.4 -import QtQuick.Layouts 1.11 -import QtQuick.Dialogs 1.3 - -import QGroundControl 1.0 -import QGroundControl.Controls 1.0 -import QGroundControl.Palette 1.0 -import QGroundControl.MultiVehicleManager 1.0 -import QGroundControl.ScreenTools 1.0 -import QGroundControl.Controllers 1.0 - -Item { - id: _root - - // FIXME: Reaching up for communicationLost? - - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle - property real _toolIndicatorMargins: ScreenTools.defaultFontPixelHeight * 0.66 - - Component.onCompleted: _viewButtonClicked(flyButton) - - function _viewButtonClicked(button) { - if (mainWindow.preventViewSwitch()) { - return false - } - viewButtonSelectRow.visible = false - buttonSelectHideTimer.stop() - currentButton.icon.source = button.icon.source - currentButton.logo = button.logo - return true - } - - //-- Setup can be invoked from c++ side - Connections { - target: setupWindow - onVisibleChanged: { - if (setupWindow.visible) { - _viewButtonClicked(setupButton) - } - } - } - - QGCPalette { id: qgcPal } - - /// Bottom single pixel divider - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - height: 1 - color: "black" - visible: qgcPal.globalTheme === QGCPalette.Light - } - - - //-- Setup can be invoked from c++ side - Connections { - target: setupWindow - onVisibleChanged: { - if (setupWindow.visible) { - buttonRow.clearAllChecks() - setupButton.checked = true - } - } - } - - RowLayout { - id: viewButtonRow - anchors.bottomMargin: 1 - anchors.top: parent.top - anchors.bottom: parent.bottom - spacing: ScreenTools.defaultFontPixelWidth / 2 - - QGCToolBarButton { - id: currentButton - Layout.fillHeight: true - - 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: currentButton.icon.source !== icon.source && !QGroundControl.corePlugin.options.combineSettingsAndSetup - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showSettingsView() - } - } - } - - QGCToolBarButton { - id: setupButton - Layout.fillHeight: true - icon.source: "/qmlimages/Gears.svg" - visible: currentButton.icon.source !== icon.source - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showSetupView() - } - } - } - - QGCToolBarButton { - id: planButton - Layout.fillHeight: true - icon.source: "/qmlimages/Plan.svg" - visible: currentButton.icon.source !== icon.source - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showPlanView() - } - } - } - - QGCToolBarButton { - id: flyButton - Layout.fillHeight: true - icon.source: "/qmlimages/PaperPlane.svg" - visible: currentButton.icon.source !== icon.source - 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: currentButton.icon.source !== icon.source && QGroundControl.corePlugin.showAdvancedUI - onClicked: { - if (_viewButtonClicked(this)) { - mainWindow.showAnalyzeView() - } - } - } - } - } - - // View / Tool separator - Row { - id: separator - anchors.bottomMargin: 1 - anchors.top: parent.top - anchors.bottom: parent.bottom - spacing: ScreenTools.defaultFontPixelWidth * 1.5 - - Item { - anchors.top: parent.top - anchors.bottom: parent.bottom - width: ScreenTools.defaultFontPixelWidth / 2 - } - - Rectangle { - anchors.margins: ScreenTools.defaultFontPixelHeight / 2 - anchors.top: parent.top - anchors.bottom: parent.bottom - width: 1 - color: qgcPal.text - } - - Item { - anchors.top: parent.top - anchors.bottom: parent.bottom - width: ScreenTools.defaultFontPixelWidth / 2 - } - } - - QGCFlickable { - id: toolsFlickable - anchors.left: separator.right - anchors.right: connectionStatus.visible ? connectionStatus.left : parent.right - anchors.bottomMargin: 1 - anchors.top: parent.top - anchors.bottom: parent.bottom - contentWidth: toolRow.width - flickableDirection: Flickable.HorizontalFlick - - Row { - id: toolRow - anchors.bottomMargin: 1 - anchors.top: parent.top - anchors.bottom: parent.bottom - spacing: ScreenTools.defaultFontPixelWidth * 1.5 - - Repeater { - id: appRepeater - model: QGroundControl.corePlugin.toolBarIndicators - - Loader { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: _toolIndicatorMargins - source: modelData - visible: item.showIndicator - } - } - - Repeater { - model: _activeVehicle ? _activeVehicle.toolBarIndicators : [] - - Loader { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: _toolIndicatorMargins - source: modelData - visible: item.showIndicator - } - } - } - } - - //------------------------------------------------------------------------- - //-- Branding Logo - Image { - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: ScreenTools.defaultFontPixelHeight * 0.66 - visible: _activeVehicle && !communicationLost && x > (toolsFlickable.x + toolsFlickable.contentWidth + ScreenTools.defaultFontPixelWidth) - fillMode: Image.PreserveAspectFit - source: _outdoorPalette ? _brandImageOutdoor : _brandImageIndoor - mipmap: true - - property bool _outdoorPalette: qgcPal.globalTheme === QGCPalette.Light - property bool _corePluginBranding: QGroundControl.corePlugin.brandImageIndoor.length != 0 - property string _userBrandImageIndoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageIndoor.value - property string _userBrandImageOutdoor: QGroundControl.settingsManager.brandImageSettings.userBrandImageOutdoor.value - property bool _userBrandingIndoor: _userBrandImageIndoor.length != 0 - property bool _userBrandingOutdoor: _userBrandImageOutdoor.length != 0 - property string _brandImageIndoor: _userBrandingIndoor ? - _userBrandImageIndoor : (_userBrandingOutdoor ? - _userBrandImageOutdoor : (_corePluginBranding ? - QGroundControl.corePlugin.brandImageIndoor : (activeVehicle ? - activeVehicle.brandImageIndoor : "" - ) - ) - ) - property string _brandImageOutdoor: _userBrandingOutdoor ? - _userBrandImageOutdoor : (_userBrandingIndoor ? - _userBrandImageIndoor : (_corePluginBranding ? - QGroundControl.corePlugin.brandImageOutdoor : (activeVehicle ? - activeVehicle.brandImageOutdoor : "" - ) - ) - ) - } - - // Small parameter download progress bar - Rectangle { - anchors.bottom: parent.bottom - height: _root.height * 0.05 - width: _activeVehicle ? _activeVehicle.parameterManager.loadProgress * parent.width : 0 - color: qgcPal.colorGreen - visible: !largeProgressBar.visible - } - - // Large parameter download progress bar - Rectangle { - id: largeProgressBar - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: parent.height - color: qgcPal.window - visible: _showLargeProgress - - property bool _initialDownloadComplete: _activeVehicle ? _activeVehicle.parameterManager.parametersReady : true - property bool _userHide: false - property bool _showLargeProgress: !_initialDownloadComplete && !_userHide && qgcPal.globalTheme === QGCPalette.Light - - Connections { - target: QGroundControl.multiVehicleManager - onActiveVehicleChanged: largeProgressBar._userHide = false - } - - Rectangle { - anchors.top: parent.top - anchors.bottom: parent.bottom - width: _activeVehicle ? _activeVehicle.parameterManager.loadProgress * parent.width : 0 - color: qgcPal.colorGreen - } - - QGCLabel { - anchors.centerIn: parent - text: qsTr("Downloading Parameters") - font.pointSize: ScreenTools.largeFontPointSize - } - - QGCLabel { - anchors.margins: _margin - anchors.right: parent.right - anchors.bottom: parent.bottom - text: qsTr("Click anywhere to hide") - - property real _margin: ScreenTools.defaultFontPixelWidth / 2 - } - - MouseArea { - anchors.fill: parent - onClicked: largeProgressBar._userHide = true - } - } - - //------------------------------------------------------------------------- - //-- Waiting for a vehicle - QGCLabel { - anchors.rightMargin: ScreenTools.defaultFontPixelWidth - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Waiting For Vehicle Connection") - font.pointSize: ScreenTools.mediumFontPointSize - font.family: ScreenTools.demiboldFontFamily - color: qgcPal.colorRed - visible: !_activeVehicle - } - - //------------------------------------------------------------------------- - //-- Connection Status - Row { - id: connectionStatus - anchors.rightMargin: ScreenTools.defaultFontPixelWidth - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.right: parent.right - layoutDirection: Qt.RightToLeft - spacing: ScreenTools.defaultFontPixelWidth - visible: _activeVehicle && communicationLost - - QGCButton { - id: disconnectButton - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Disconnect") - primary: true - onClicked: _activeVehicle.disconnectInactiveVehicle() - } - - QGCLabel { - id: connectionLost - anchors.verticalCenter: parent.verticalCenter - text: qsTr("COMMUNICATION LOST") - font.pointSize: ScreenTools.largeFontPointSize - font.family: ScreenTools.demiboldFontFamily - color: qgcPal.colorRed - } - } -}