22 changed files with 751 additions and 293 deletions
@ -0,0 +1,415 @@
@@ -0,0 +1,415 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
||||
* |
||||
* 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 |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue