diff --git a/qgcresources.qrc b/qgcresources.qrc index c6f2e7aaceae81aa9afb59f2975013b0626b748e..643113e818ac906e8959058ff3e9b4604fd834cc 100644 --- a/qgcresources.qrc +++ b/qgcresources.qrc @@ -41,9 +41,7 @@ src/FlightMap/Images/attitudeInstrument.svg src//FlightMap/Images/attitudePointer.svg src/FlightMap/Images/buttonHome.svg - src/FlightMap/Images/buttonLeft.svg src/FlightMap/Images/buttonMore.svg - src/FlightMap/Images/buttonRight.svg src/FlightMap/Images/compassInstrumentAirplane.svg src/FlightMap/Images/compassInstrumentDial.svg src/FlightMap/Images/crossHair.svg @@ -74,9 +72,6 @@ src/FlightMap/Images/MapTypeBlack.svg src/FlightMap/Images/TrashDelete.svg src/FlightMap/Images/TrashDeleteBlack.svg - src/FlightMap/Images/XDelete.svg - src/FlightMap/Images/XDeleteBlack.svg - src/ui/toolbar/Images/Armed.svg @@ -84,8 +79,12 @@ src/ui/toolbar/Images/Connect.svg src/ui/toolbar/Images/Disarmed.svg src/ui/toolbar/Images/Disconnect.svg + src/ui/toolbar/Images/Gears.svg src/ui/toolbar/Images/Gps.svg + src/ui/toolbar/Images/Hamburger.svg src/ui/toolbar/Images/Megaphone.svg + src/ui/toolbar/Images/PaperPlane.svg + src/ui/toolbar/Images/Plan.svg src/ui/toolbar/Images/Quad.svg src/ui/toolbar/Images/RC.svg src/ui/toolbar/Images/Signal0.svg @@ -116,19 +115,14 @@ resources/Shutdown.svg resources/Antenna_T.svg resources/Antenna_RC.svg - resources/Battery_0.svg - resources/Battery_20.svg - resources/Battery_40.svg - resources/Battery_60.svg - resources/Battery_80.svg - resources/Battery_100.svg resources/SystemLockScreen.svg resources/SplashScreen.png resources/QGroundControlConnect.svg - resources/Gears.svg - resources/Plan.svg - resources/PaperPlane.svg resources/PowerButton.svg + resources/buttonLeft.svg + resources/buttonRight.svg + resources/XDelete.svg + resources/XDeleteBlack.svg diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 0fcc6cef378337986a1430e82e886994ea0549ae..feb302b3b19449ef823f950dbb34ded81dfbd189 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -15,8 +15,6 @@ src/FactSystem/FactControls/FactCheckBox.qml src/FactSystem/FactControls/FactComboBox.qml src/QmlControls/QGroundControl.Controls.qmldir - - src/QmlControls/QGCButton.qml src/QmlControls/QGCRadioButton.qml src/QmlControls/QGCCheckBox.qml @@ -48,24 +46,16 @@ src/QmlControls/QGCCanvas.qml src/QmlControls/ExclusiveGroupItem.qml src/QmlControls/ClickableColor.qml - - src/ui/MainWindow.qml - - + src/ui/MainWindowLeftPanel.qml src/ui/toolbar/MainToolBar.qml src/ui/toolbar/MainToolBarIndicators.qml src/ui/toolbar/SignalStrength.qml - - src/VehicleSetup/SetupView.qml src/VehicleSetup/VehicleSummary.qml src/VehicleSetup/FirmwareUpgrade.qml src/VehicleSetup/JoystickConfig.qml src/VehicleSetup/SetupParameterEditor.qml - src/VehicleSetup/DebugWindow.qml - src/VehicleSetup/GeneralSettings.qml - src/ViewWidgets/CustomCommandWidget.qml src/AutoPilotPlugins/PX4/SafetyComponent.qml src/AutoPilotPlugins/PX4/RadioComponent.qml @@ -84,19 +74,13 @@ src/FlightDisplay/FlightDisplayView.qml src/MissionEditor/MissionEditor.qml src/MissionEditor/MissionEditorHelp.qml - src/AutoPilotPlugins/APM/APMAirframeComponent.qml src/AutoPilotPlugins/APM/APMAirframeComponentSummary.qml - - - src/FlightDisplay/qmldir src/FlightDisplay/FlightDisplayView.qml src/FlightDisplay/FlightDisplayViewMap.qml src/FlightDisplay/FlightDisplayViewVideo.qml src/FlightDisplay/FlightDisplayViewWidgets.qml - - src/FlightMap/qmldir src/FlightMap/FlightMap.qml src/FlightMap/QGCVideoBackground.qml @@ -112,5 +96,9 @@ src/FlightMap/MapItems/MissionItemView.qml src/FlightMap/MapItems/MissionLineView.qml + src/ui/preferences/DebugWindow.qml + src/ui/preferences/MavlinkSettings.qml + src/ui/preferences/GeneralSettings.qml + diff --git a/resources/Battery_0.svg b/resources/Battery_0.svg deleted file mode 100644 index 5abc1691819fe0f31575bd925880946ce717833d..0000000000000000000000000000000000000000 --- a/resources/Battery_0.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/resources/Battery_100.svg b/resources/Battery_100.svg deleted file mode 100644 index f06d3ac5ea8df0ee03f9736e7849bff4f3a57845..0000000000000000000000000000000000000000 --- a/resources/Battery_100.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/resources/Battery_20.svg b/resources/Battery_20.svg deleted file mode 100644 index f456b06558d15f133d5574e457dc818c82c17f0c..0000000000000000000000000000000000000000 --- a/resources/Battery_20.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/resources/Battery_40.svg b/resources/Battery_40.svg deleted file mode 100644 index 3b823ac4416b66a2b8c15df5ab44122dfa79d62e..0000000000000000000000000000000000000000 --- a/resources/Battery_40.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/resources/Battery_60.svg b/resources/Battery_60.svg deleted file mode 100644 index 6892d6ec9e753f2f33ccf264ab5b0dcee617118e..0000000000000000000000000000000000000000 --- a/resources/Battery_60.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/resources/Battery_80.svg b/resources/Battery_80.svg deleted file mode 100644 index 390a8f32e690c6f8d3209c9bccecfdd11eb41be6..0000000000000000000000000000000000000000 --- a/resources/Battery_80.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - diff --git a/resources/XDelete.svg b/resources/XDelete.svg new file mode 100644 index 0000000000000000000000000000000000000000..5b8ecdef20fb0f7d22043848f9b9859824a0bc92 --- /dev/null +++ b/resources/XDelete.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/resources/XDeleteBlack.svg b/resources/XDeleteBlack.svg new file mode 100644 index 0000000000000000000000000000000000000000..0101482bed28637718455cf756b1eed3f0aaa386 --- /dev/null +++ b/resources/XDeleteBlack.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/resources/buttonLeft.svg b/resources/buttonLeft.svg new file mode 100644 index 0000000000000000000000000000000000000000..0d5da82cbb886b2a21e92b515735360aaea16125 --- /dev/null +++ b/resources/buttonLeft.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/resources/buttonRight.svg b/resources/buttonRight.svg new file mode 100644 index 0000000000000000000000000000000000000000..b12d82560fe684c3293c11625526a1c8c28ff8b4 --- /dev/null +++ b/resources/buttonRight.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml index 418794a2a43bab8d38cf463c0169b4483230c39d..b25ba207898ec4054d9c801397b7c78fcea5a0df 100644 --- a/src/FlightDisplay/FlightDisplayView.qml +++ b/src/FlightDisplay/FlightDisplayView.qml @@ -182,11 +182,11 @@ Item { width: ScreenTools.defaultFontPixelSize * 2 radius: ScreenTools.defaultFontPixelSize / 3 visible: _controller.hasVideo && !_isPipVisible - color: isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5) + color: isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5) Image { width: parent.width * 0.75 height: parent.height * 0.75 - source: "/qmlimages/buttonRight.svg" + source: "/res/buttonRight.svg" mipmap: true fillMode: Image.PreserveAspectFit anchors.verticalCenter: parent.verticalCenter diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml index 8751bf8598663d443d37868ee8d64e78a513636e..fe93d8912fa5bfa67f67b609bdf771ea109b81ce 100644 --- a/src/FlightDisplay/FlightDisplayViewWidgets.qml +++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml @@ -108,11 +108,11 @@ Item { width: ScreenTools.defaultFontPixelSize * 2 radius: ScreenTools.defaultFontPixelSize / 3 visible: !_isInstrumentVisible - color: isBackgroundDark ? Qt.rgba(1,1,1,0.5) : Qt.rgba(0,0,0,0.5) + color: isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5) Image { width: parent.width * 0.75 height: parent.height * 0.75 - source: "/qmlimages/buttonLeft.svg" + source: "/res/buttonLeft.svg" mipmap: true fillMode: Image.PreserveAspectFit anchors.verticalCenter: parent.verticalCenter diff --git a/src/FlightMap/Images/XDelete.svg b/src/FlightMap/Images/XDelete.svg deleted file mode 100644 index e43804f78f6b9a693a4255398081f56b2cdefae6..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/XDelete.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/src/FlightMap/Images/XDeleteBlack.svg b/src/FlightMap/Images/XDeleteBlack.svg deleted file mode 100644 index 2aea3867c5c2c96a8a9cb1e7be60582a57676564..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/XDeleteBlack.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/src/FlightMap/Images/buttonLeft.svg b/src/FlightMap/Images/buttonLeft.svg deleted file mode 100644 index c238ffebac6ae905d8bf7c9a976188606ad748b2..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/buttonLeft.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/src/FlightMap/Images/buttonRight.svg b/src/FlightMap/Images/buttonRight.svg deleted file mode 100644 index 6dca6c1c94b1c04f2835f9111f0fe8e49b4bb787..0000000000000000000000000000000000000000 --- a/src/FlightMap/Images/buttonRight.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/src/MissionEditor/MissionEditorHelp.qml b/src/MissionEditor/MissionEditorHelp.qml index 6edf694e0e84865cda1820189ccd088b291865be..fb8c090633ddfd5e9dd59001ac6c547608b9b115 100644 --- a/src/MissionEditor/MissionEditorHelp.qml +++ b/src/MissionEditor/MissionEditorHelp.qml @@ -45,7 +45,7 @@ Rectangle { anchors.right: parent.right width: ScreenTools.defaultFontPixelHeight * 1.5 height: ScreenTools.defaultFontPixelHeight * 1.5 - source: (qgcPal.globalTheme === QGCPalette.Light) ? "/qmlimages/XDeleteBlack.svg" : "/qmlimages/XDelete.svg" + source: (qgcPal.globalTheme === QGCPalette.Light) ? "/res/XDeleteBlack.svg" : "/res/XDelete.svg" fillMode: Image.PreserveAspectFit mipmap: true smooth: true diff --git a/src/QmlControls/QGCToolBarButton.qml b/src/QmlControls/QGCToolBarButton.qml index a32229aa885e9f1c0f16f2295f9f442323ef644a..54a89fea0f76c74e89a1aa82343b76936a09de18 100644 --- a/src/QmlControls/QGCToolBarButton.qml +++ b/src/QmlControls/QGCToolBarButton.qml @@ -33,7 +33,7 @@ Item { id: iconOverlay anchors.fill: icon source: icon - color: (checked ? "#ffff20" : "#ffffff") + color: (checked ? "#e4e428" : "#ffffff") } MouseArea { diff --git a/src/VehicleSetup/SetupView.qml b/src/VehicleSetup/SetupView.qml index 4a0ab645765715e044c69d87dd3e6595020c8b3c..da7faf82189afabee287f6c270ca84cb1b7bc27e 100644 --- a/src/VehicleSetup/SetupView.qml +++ b/src/VehicleSetup/SetupView.qml @@ -36,7 +36,6 @@ import QGroundControl.ScreenTools 1.0 import QGroundControl.MultiVehicleManager 1.0 Rectangle { - //color: qgcPal.windowShadeDark color: qgcPal.window z: QGroundControl.zOrderTopMost @@ -110,16 +109,6 @@ Rectangle { } } - function showDebugPanel() - { - panelLoader.source = "DebugWindow.qml"; - } - - function showGeneralPanel() - { - panelLoader.source = "GeneralSettings.qml"; - } - Component.onCompleted: showSummaryPanel() Connections { @@ -219,7 +208,7 @@ Rectangle { Flickable { id: buttonScroll - width: _buttonWidth + width: mainWindow.menuButtonWidth anchors.topMargin: _defaultTextHeight / 2 anchors.top: parent.top anchors.bottom: parent.bottom @@ -231,12 +220,12 @@ Rectangle { Column { id: buttonColumn - width: _buttonWidth + width: mainWindow.menuButtonWidth spacing: _defaultTextHeight / 2 SubMenuButton { id: summaryButton - width: _buttonWidth + width: mainWindow.menuButtonWidth imageResource: "/qmlimages/VehicleSummaryIcon.png" setupIndicator: false checked: true @@ -246,18 +235,9 @@ Rectangle { onClicked: showSummaryPanel() } - SubMenuButton { - width: _buttonWidth - setupIndicator: false - exclusiveGroup: setupButtonGroup - visible: true - text: "GENERAL" - onClicked: showGeneralPanel() - } - SubMenuButton { id: firmwareButton - width: _buttonWidth + width: mainWindow.menuButtonWidth imageResource: "/qmlimages/FirmwareUpgradeIcon.png" setupIndicator: false exclusiveGroup: setupButtonGroup @@ -269,7 +249,7 @@ Rectangle { SubMenuButton { id: joystickButton - width: _buttonWidth + width: mainWindow.menuButtonWidth setupIndicator: true setupComplete: joystickManager.activeJoystick ? joystickManager.activeJoystick.calibrated : false exclusiveGroup: setupButtonGroup @@ -283,7 +263,7 @@ Rectangle { model: _fullParameterVehicleAvailable ? multiVehicleManager.activeVehicle.autopilot.vehicleComponents : 0 SubMenuButton { - width: _buttonWidth + width: mainWindow.menuButtonWidth imageResource: modelData.iconResource setupIndicator: modelData.requiresSetup setupComplete: modelData.setupComplete @@ -295,7 +275,7 @@ Rectangle { } SubMenuButton { - width: _buttonWidth + width: mainWindow.menuButtonWidth setupIndicator: false exclusiveGroup: setupButtonGroup visible: multiVehicleManager.parameterReadyVehicleAvailable @@ -304,16 +284,6 @@ Rectangle { onClicked: showParametersPanel() } - SubMenuButton { - width: _buttonWidth - setupIndicator: false - exclusiveGroup: setupButtonGroup - visible: ScreenTools.isDebug - text: "DEBUG" - - onClicked: showDebugPanel() - } - } } diff --git a/src/ui/MainWindow.qml b/src/ui/MainWindow.qml index 91f0664faccc0a94b64603a85a1de7f9c52d4b0b..a5f020236d4122abfb0be5a04b21d864e49df800 100644 --- a/src/ui/MainWindow.qml +++ b/src/ui/MainWindow.qml @@ -21,11 +21,12 @@ along with QGROUNDCONTROL. If not, see . ======================================================================*/ -import QtQuick 2.3 +import QtQuick 2.5 import QtQuick.Controls 1.2 import QtPositioning 5.2 import QGroundControl 1.0 +import QGroundControl.Palette 1.0 import QGroundControl.Controls 1.0 import QGroundControl.FlightDisplay 1.0 import QGroundControl.ScreenTools 1.0 @@ -37,7 +38,14 @@ Item { readonly property string _planViewSource: "MissionEditor.qml" readonly property string _setupViewSource: "SetupView.qml" - property real avaiableHeight: height - toolBar.height + QGCPalette { id: __qgcPal; colorGroupEnabled: true } + + property real tbHeight: ScreenTools.isMobile ? (ScreenTools.isTinyScreen ? (mainWindow.width * 0.0666) : (mainWindow.width * 0.0444)) : ScreenTools.defaultFontPixelSize * 4 + property int tbCellHeight: tbHeight * 0.75 + property real tbSpacing: ScreenTools.isMobile ? width * 0.00824 : 9.54 + property real tbButtonWidth: tbCellHeight * 1.3 + property real avaiableHeight: height - tbHeight + property real menuButtonWidth: (tbButtonWidth * 2) + (tbSpacing * 4) + 1 Connections { @@ -77,37 +85,67 @@ Item { onShowSetupVehicleComponent: setupViewLoader.item.showVehicleComponentPanel(vehicleComponent) } - // Detect tablet position + //-- Detect tablet position property var tabletPosition: QtPositioning.coordinate(37.803784, -122.462276) PositionSource { id: positionSource updateInterval: 1000 - active: ScreenTools.isMobile + active: true // ScreenTools.isMobile onPositionChanged: { - tabletPosition = positionSource.position.coordinate - flightView.latitude = tabletPosition.latitude - flightView.longitude = tabletPosition.longitude - positionSource.active = false + tabletPosition = positionSource.position.coordinate + flightView.latitude = tabletPosition.latitude + flightView.longitude = tabletPosition.longitude + positionSource.active = false + } + } + + function showLeftMenu() { + if(!leftPanel.visible && !leftPanel.item.animateShowDialog.running) { + leftPanel.visible = true + leftPanel.item.animateShowDialog.start() + } else if(leftPanel.visible && !leftPanel.item.animateShowDialog.running) { + //-- If open, toggle it closed + hideLeftMenu() + } + } + + function hideLeftMenu() { + if(leftPanel.visible && !leftPanel.item.animateHideDialog.running) { + leftPanel.item.animateHideDialog.start() } } + //-- Left Settings Menu + Loader { + id: leftPanel + anchors.fill: mainWindow + visible: false + z: QGroundControl.zOrderTopMost + 100 + } + + //-- Main UI + MainToolBar { id: toolBar - height: ScreenTools.isMobile ? (ScreenTools.isTinyScreen ? (mainWindow.width * 0.0666) : (mainWindow.width * 0.0444)) : ScreenTools.defaultFontPixelSize * 4 + height: tbHeight anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top mainWindow: mainWindow + opaqueBackground: leftPanel.visible isBackgroundDark: flightView.isBackgroundDark z: QGroundControl.zOrderTopMost + Component.onCompleted: { + leftPanel.source = "MainWindowLeftPanel.qml" + } } FlightDisplayView { - id: flightView - anchors.fill: parent - avaiableHeight: mainWindow.avaiableHeight - visible: true + id: flightView + anchors.fill: parent + avaiableHeight: mainWindow.avaiableHeight + visible: true } Loader { diff --git a/src/ui/MainWindowLeftPanel.qml b/src/ui/MainWindowLeftPanel.qml new file mode 100644 index 0000000000000000000000000000000000000000..b831c8f025c25760eda1c6f296fde513d8fcacd7 --- /dev/null +++ b/src/ui/MainWindowLeftPanel.qml @@ -0,0 +1,250 @@ +/*===================================================================== + +QGroundControl Open Source Ground Control Station + +(c) 2009, 2015 QGROUNDCONTROL PROJECT + +This file is part of the QGROUNDCONTROL project + +QGROUNDCONTROL is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +QGROUNDCONTROL is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with QGROUNDCONTROL. If not, see . + +======================================================================*/ + +import QtQuick 2.5 +import QtQuick.Controls 1.2 +import QtPositioning 5.2 + +import QGroundControl 1.0 +import QGroundControl.Palette 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.FlightDisplay 1.0 +import QGroundControl.ScreenTools 1.0 + + +//-- Left Menu +Item { + id: __leftPanel + anchors.fill: parent + + property alias animateShowDialog: __animateShowDialog + property alias animateHideDialog: __animateHideDialog + + readonly property int __animationDuration: 100 + readonly property real __closeButtonSize: ScreenTools.defaultFontPixelHeight * 2 + + onVisibleChanged: { + //-- Unselect any selected button + panelActionGroup.current = null + //-- Destroy panel contents if not visible + if(!visible) { + __rightPanel.source = "" + } + } + + ParallelAnimation { + id: __animateShowDialog + NumberAnimation { + target: __transparentSection + properties: "opacity" + from: 0.0 + to: 0.8 + duration: __leftPanel.__animationDuration + } + NumberAnimation { + target: __transparentSection + properties: "width" + from: 1 + to: mainWindow.width + duration: __leftPanel.__animationDuration + } + } + + ParallelAnimation { + id: __animateHideDialog + NumberAnimation { + target: __transparentSection + properties: "opacity" + from: 0.8 + to: 0.0 + duration: __leftPanel.__animationDuration + } + NumberAnimation { + target: __transparentSection + properties: "width" + from: mainWindow.width + to: 1 + duration: __leftPanel.__animationDuration + } + onRunningChanged: { + if (!running) { + parent.visible = false + } + } + } + + // This covers the screen with a transparent section + Rectangle { + id: __transparentSection + height: parent.height - toolBar.height + anchors.bottom: parent.bottom + anchors.left: parent.left + opacity: 0.0 + color: __qgcPal.window + visible: __rightPanel.source == "" + // Dismiss if clicked outside menu area + MouseArea { + anchors.fill: parent + onClicked: { + mainWindow.hideLeftMenu() + } + } + } + + //-- Top Separator + Rectangle { + id: __topSeparator + width: parent.width + height: 1 + y: toolBar.height + anchors.left: parent.left + color: QGroundControl.isDarkStyle ? "#909090" : "#7f7f7f" + } + + // This is the menu dialog panel which is anchored to the left edge + Rectangle { + id: __leftMenu + width: (tbButtonWidth * 2) + (tbSpacing * 4) + 1 + anchors.left: parent.left + anchors.top: __topSeparator.bottom + anchors.bottom: parent.bottom + color: __qgcPal.windowShadeDark + + ExclusiveGroup { id: panelActionGroup } + + Column { + width: parent.width + spacing: ScreenTools.defaultFontPixelHeight + Item { + width: 1 + height: ScreenTools.defaultFontPixelHeight * 0.5 + } + QGCLabel { + text: "Preferences" + anchors.horizontalCenter: parent.horizontalCenter + } + QGCButton { + width: parent.width * 0.8 + height: ScreenTools.defaultFontPixelHeight * 2.5 + text: "General" + exclusiveGroup: panelActionGroup + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + if(__rightPanel.source != "GeneralSettings.qml") { + __rightPanel.source = "GeneralSettings.qml" + } + checked = true + } + } + QGCButton { + width: parent.width * 0.8 + height: ScreenTools.defaultFontPixelHeight * 2.5 + text: "MavLink" + exclusiveGroup: panelActionGroup + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + if(__rightPanel.source != "MavlinkSettings.qml") { + __rightPanel.source = "MavlinkSettings.qml" + } + checked = true + } + } + QGCButton { + width: parent.width * 0.8 + height: ScreenTools.defaultFontPixelHeight * 2.5 + text: "Debug" + visible: ScreenTools.isDebug + exclusiveGroup: panelActionGroup + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + if(__rightPanel.source != "DebugWindow.qml") { + __rightPanel.source = "DebugWindow.qml" + } + checked = true + } + } + } + } + + //-- Clicking in tool bar area dismiss it all + MouseArea { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: toolBar.height + onClicked: { + mainWindow.hideLeftMenu() + } + } + + //-- Vertical Separator + Rectangle { + id: __verticalSeparator + width: 1 + height: parent.height - toolBar.height + anchors.left: __leftMenu.right + anchors.bottom: parent.bottom + color: QGroundControl.isDarkStyle ? "#909090" : "#7f7f7f" + } + + //-- Main Setting Display Area + Rectangle { + anchors.left: __verticalSeparator.right + width: mainWindow.width - __leftMenu.width - __verticalSeparator.width + height: parent.height - toolBar.height - __topSeparator.height + anchors.bottom: parent.bottom + visible: __rightPanel.source != "" + color: __qgcPal.window + //-- Panel Contents + Loader { + id: __rightPanel + anchors.fill: parent + } + //-- Dismiss it all + Item { + id: closeButton + width: __closeButtonSize + height: __closeButtonSize + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: ScreenTools.defaultFontPixelSize * 0.5 + QGCColoredImage { + source: "/res/XDelete.svg" + mipmap: true + fillMode: Image.PreserveAspectFit + color: __qgcPal.text + width: parent.width * 0.75 + height: parent.height * 0.75 + anchors.centerIn: parent + } + MouseArea { + anchors.fill: parent + onClicked: { + __rightPanel.source = "" + mainWindow.hideLeftMenu() + } + } + + } + } +} diff --git a/src/VehicleSetup/DebugWindow.qml b/src/ui/preferences/DebugWindow.qml similarity index 100% rename from src/VehicleSetup/DebugWindow.qml rename to src/ui/preferences/DebugWindow.qml diff --git a/src/VehicleSetup/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml similarity index 75% rename from src/VehicleSetup/GeneralSettings.qml rename to src/ui/preferences/GeneralSettings.qml index bc7690450a7da6ea53fae3c24010e8a5091b31b4..dd3aef9d0f9e8bfb0faa2d37df6f70d52eec23ed 100644 --- a/src/VehicleSetup/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -35,7 +35,7 @@ import QGroundControl.Palette 1.0 Rectangle { id: _generalRoot - color: qgcPal.windowShade + color: __qgcPal.window QGCPalette { id: qgcPal @@ -169,60 +169,6 @@ Rectangle { } } } - //----------------------------------------------------------------- - //-- Mavlink Settings - //----------------------------------------------------------------- - Rectangle { - height: 1 - width: parent.width - color: qgcPal.button - } - QGCCheckBox { - id: showMavlinkSettings - text: "Show Advanced Mavlink Settings" - checked: false - } - QGCLabel { - text: "Mavlink Settings" - visible: showMavlinkSettings.checked - font.pixelSize: ScreenTools.mediumFontPixelSize - } - Rectangle { - height: 1 - width: parent.width - color: qgcPal.button - visible: showMavlinkSettings.checked - } - //----------------------------------------------------------------- - //-- Mavlink Heartbeats - QGCCheckBox { - text: "Emit heartbeat" - checked: QGroundControl.isHeartBeatEnabled - visible: showMavlinkSettings.checked - onClicked: { - QGroundControl.isHeartBeatEnabled = checked - } - } - //----------------------------------------------------------------- - //-- Mavlink Multiplexing - QGCCheckBox { - text: "Enable multiplexing (forward packets to all other links)" - checked: QGroundControl.isMultiplexingEnabled - visible: showMavlinkSettings.checked - onClicked: { - QGroundControl.isMultiplexingEnabled = checked - } - } - //----------------------------------------------------------------- - //-- Mavlink Version Check - QGCCheckBox { - text: "Only accept MAVs with same protocol version" - checked: QGroundControl.isVersionCheckEnabled - visible: showMavlinkSettings.checked - onClicked: { - QGroundControl.isVersionCheckEnabled = checked - } - } } } } diff --git a/src/ui/preferences/MavlinkSettings.qml b/src/ui/preferences/MavlinkSettings.qml new file mode 100644 index 0000000000000000000000000000000000000000..3acb6604e29a30d31f43f4d873288d871fca566a --- /dev/null +++ b/src/ui/preferences/MavlinkSettings.qml @@ -0,0 +1,97 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2015 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +import QtQuick 2.5 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 +import QtQuick.Dialogs 1.1 + +import QGroundControl 1.0 +import QGroundControl.FactSystem 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.ScreenTools 1.0 +import QGroundControl.MultiVehicleManager 1.0 +import QGroundControl.Palette 1.0 + +Rectangle { + id: __mavlinkRoot + color: __qgcPal.window + + QGCPalette { + id: qgcPal + colorGroupEnabled: enabled + } + + Flickable { + clip: true + anchors.fill: parent + anchors.margins: ScreenTools.defaultFontPixelWidth + contentHeight: settingsColumn.height + contentWidth: __mavlinkRoot.width + flickableDirection: Flickable.VerticalFlick + boundsBehavior: Flickable.StopAtBounds + + Column { + id: settingsColumn + width: __mavlinkRoot.width + spacing: ScreenTools.defaultFontPixelHeight + anchors.margins: ScreenTools.defaultFontPixelWidth + QGCLabel { + text: "MavLink Settings" + font.pixelSize: ScreenTools.mediumFontPixelSize + } + Rectangle { + height: 1 + width: parent.width + color: qgcPal.button + } + //----------------------------------------------------------------- + //-- Mavlink Heartbeats + QGCCheckBox { + text: "Emit heartbeat" + checked: QGroundControl.isHeartBeatEnabled + onClicked: { + QGroundControl.isHeartBeatEnabled = checked + } + } + //----------------------------------------------------------------- + //-- Mavlink Multiplexing + QGCCheckBox { + text: "Enable multiplexing (forward packets to all other links)" + checked: QGroundControl.isMultiplexingEnabled + onClicked: { + QGroundControl.isMultiplexingEnabled = checked + } + } + //----------------------------------------------------------------- + //-- Mavlink Version Check + QGCCheckBox { + text: "Only accept MAVs with same protocol version" + checked: QGroundControl.isVersionCheckEnabled + onClicked: { + QGroundControl.isVersionCheckEnabled = checked + } + } + } + } +} diff --git a/resources/Gears.svg b/src/ui/toolbar/Images/Gears.svg similarity index 100% rename from resources/Gears.svg rename to src/ui/toolbar/Images/Gears.svg diff --git a/src/ui/toolbar/Images/Hamburger.svg b/src/ui/toolbar/Images/Hamburger.svg new file mode 100644 index 0000000000000000000000000000000000000000..eca1b48df3fa1e83788eb9ab5258ecd3a8f3eaf7 --- /dev/null +++ b/src/ui/toolbar/Images/Hamburger.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/resources/PaperPlane.svg b/src/ui/toolbar/Images/PaperPlane.svg similarity index 100% rename from resources/PaperPlane.svg rename to src/ui/toolbar/Images/PaperPlane.svg diff --git a/resources/Plan.svg b/src/ui/toolbar/Images/Plan.svg similarity index 100% rename from resources/Plan.svg rename to src/ui/toolbar/Images/Plan.svg diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index f17c4de32d36cc86ef860c72f1820b3fae2c6079..9d110d0abd41c72424dfdc7ac8157cbf9e3464a9 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -40,7 +40,7 @@ import QGroundControl.Controllers 1.0 Rectangle { id: toolBar - color: isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5) + color: opaqueBackground ? "#404040" : (isBackgroundDark ? Qt.rgba(0,0,0,0.75) : Qt.rgba(0,0,0,0.5)) QGCPalette { id: qgcPal; colorGroupEnabled: true } @@ -48,6 +48,7 @@ Rectangle { property var mainWindow: null property bool isMessageImportant: activeVehicle ? !activeVehicle.messageTypeNormal && !activeVehicle.messageTypeNone : false property bool isBackgroundDark: true + property bool opaqueBackground: false /* Dev System (Mac OS) @@ -132,14 +133,10 @@ Rectangle { */ - readonly property int cellHeight: height * 0.75 - readonly property real tbFontSmall: 10 * ScreenTools.fontHRatio readonly property real tbFontNormal: 12 * ScreenTools.fontHRatio readonly property real tbFontLarge: 18 * ScreenTools.fontHRatio - readonly property real tbSpacing: ScreenTools.isMobile ? toolBar.width * 0.00824 : 9.54 - readonly property var colorGreen: "#05f068" readonly property var colorOrange: "#f0ab06" readonly property var colorRed: "#fc4638" @@ -172,61 +169,78 @@ Rectangle { Row { id: viewRow - height: cellHeight - spacing: tbSpacing + height: mainWindow.tbCellHeight + spacing: mainWindow.tbSpacing anchors.left: parent.left - anchors.leftMargin: tbSpacing + anchors.leftMargin: mainWindow.tbSpacing anchors.verticalCenter: parent.verticalCenter ExclusiveGroup { id: mainActionGroup } + QGCToolBarButton { + id: preferencesButton + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight + source: "/qmlimages/Hamburger.svg" + onClicked: { + mainWindow.showLeftMenu(); + preferencesButton.checked = false; + } + } + + Rectangle { + height: mainWindow.tbCellHeight + width: 1 + color: Qt.rgba(1,1,1,0.45) + } + QGCToolBarButton { id: setupButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight exclusiveGroup: mainActionGroup - source: "qrc:/res/Gears" + source: "/qmlimages/Gears.svg" onClicked: { _controller.onSetupView(); } } Rectangle { - height: cellHeight + height: mainWindow.tbCellHeight width: 1 color: Qt.rgba(1,1,1,0.45) } QGCToolBarButton { id: planButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight exclusiveGroup: mainActionGroup - source: "qrc:/res/Plan" + source: "/qmlimages/Plan.svg" onClicked: { _controller.onPlanView(); } } Rectangle { - height: cellHeight + height: mainWindow.tbCellHeight width: 1 color: Qt.rgba(1,1,1,0.45) } QGCToolBarButton { id: flyButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight exclusiveGroup: mainActionGroup - source: "qrc:/res/PaperPlane" + source: "/qmlimages/PaperPlane.svg" onClicked: { _controller.onFlyView(); } } Rectangle { - height: cellHeight + height: mainWindow.tbCellHeight width: 1 color: Qt.rgba(1,1,1,0.45) } @@ -235,10 +249,10 @@ Rectangle { Item { visible: showMavStatus() && !connectionStatus.visible - height: cellHeight + height: mainWindow.tbCellHeight width: (toolBar.width - viewRow.width - connectRow.width) anchors.left: viewRow.right - anchors.leftMargin: tbSpacing * 2 + anchors.leftMargin: mainWindow.tbSpacing * 2 anchors.verticalCenter: parent.verticalCenter Loader { source: multiVehicleManager.activeVehicleAvailable ? "MainToolBarIndicators.qml" : "" @@ -255,15 +269,15 @@ Rectangle { font.weight: Font.DemiBold color: colorRed anchors.left: viewRow.right - anchors.leftMargin: tbSpacing * 2 + anchors.leftMargin: mainWindow.tbSpacing * 2 anchors.verticalCenter: parent.verticalCenter } Row { id: connectRow - height: cellHeight - spacing: tbSpacing - anchors.rightMargin: tbSpacing + height: mainWindow.tbCellHeight + spacing: mainWindow.tbSpacing + anchors.rightMargin: mainWindow.tbSpacing anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter @@ -295,15 +309,15 @@ Rectangle { } Rectangle { - height: cellHeight + height: mainWindow.tbCellHeight width: 1 color: Qt.rgba(1,1,1,0.45) } QGCToolBarButton { id: connectButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight visible: _controller.connectionCount === 0 source: "/qmlimages/Connect.svg" checked: false @@ -327,15 +341,15 @@ Rectangle { console.log("tbFontSmall: " + tbFontSmall); console.log("tbFontNormal: " + tbFontNormal); console.log("tbFontLarge: " + tbFontLarge); - console.log("tbSpacing: " + tbSpacing); + console.log("mainWindow.tbSpacing: " + tbSpacing); */ } } QGCToolBarButton { id: disconnectButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight visible: _controller.connectionCount === 1 source: "/qmlimages/Disconnect.svg" checked: false @@ -365,8 +379,8 @@ Rectangle { QGCToolBarButton { id: multidisconnectButton - width: cellHeight * 1.3 - height: cellHeight + width: mainWindow.tbButtonWidth + height: mainWindow.tbCellHeight visible: _controller.connectionCount > 1 source: "/qmlimages/Disconnect.svg" checked: false @@ -410,7 +424,7 @@ Rectangle { color: qgcPal.warningText lineHeightMode: Text.ProportionalHeight lineHeight: 1.15 - anchors.margins: tbSpacing + anchors.margins: mainWindow.tbSpacing } } QGCButton { @@ -419,7 +433,7 @@ Rectangle { text: "Close" anchors.right: parent.right anchors.bottom: parent.bottom - anchors.margins: tbSpacing + anchors.margins: mainWindow.tbSpacing onClicked: { toolBarMessageArea.visible = false _controller.onToolBarMessageClosed() diff --git a/src/ui/toolbar/MainToolBarIndicators.qml b/src/ui/toolbar/MainToolBarIndicators.qml index 9d310fd8af6091ffe48a271c152cbd524055535a..012a423fbe0bf8f889e40de38a8346591e1fe257 100644 --- a/src/ui/toolbar/MainToolBarIndicators.qml +++ b/src/ui/toolbar/MainToolBarIndicators.qml @@ -101,8 +101,8 @@ Row { //-- Message Indicator Item { id: messages - width: cellHeight - height: cellHeight + width: mainWindow.tbCellHeight + height: mainWindow.tbCellHeight visible: activeVehicle.messageCount anchors.verticalCenter: parent.verticalCenter @@ -112,7 +112,7 @@ Row { visible: activeVehicle.messageCount > 0 && isMessageImportant Image { source: "/qmlimages/Yield.svg" - height: cellHeight * 0.75 + height: mainWindow.tbButtonWidth fillMode: Image.PreserveAspectFit mipmap: true smooth: true @@ -142,7 +142,7 @@ Row { Image { id: messageIcon source: "/qmlimages/Megaphone.svg" - height: cellHeight * 0.5 + height: mainWindow.tbCellHeight * 0.5 fillMode: Image.PreserveAspectFit mipmap: true smooth: true @@ -171,7 +171,7 @@ Row { Item { id: satelitte width: gpsRow.width * 1.1 - height: cellHeight + height: mainWindow.tbCellHeight Row { id: gpsRow height: parent.height @@ -181,13 +181,13 @@ Row { fillMode: Image.PreserveAspectFit mipmap: true smooth: true - width: cellHeight * 0.65 - height: cellHeight * 0.5 + width: mainWindow.tbCellHeight * 0.65 + height: mainWindow.tbCellHeight * 0.5 opacity: activeVehicle.satelliteCount < 1 ? 0.5 : 1 anchors.verticalCenter: parent.verticalCenter } SignalStrength { - size: cellHeight * 0.5 + size: mainWindow.tbCellHeight * 0.5 percent: getSatStrength(activeVehicle.satelliteCount) anchors.verticalCenter: parent.verticalCenter } @@ -208,7 +208,7 @@ Row { Item { id: rcRssi width: rssiRow.width * 1.1 - height: cellHeight + height: mainWindow.tbCellHeight Row { id: rssiRow height: parent.height @@ -217,13 +217,13 @@ Row { fillMode: Image.PreserveAspectFit mipmap: true smooth: true - width: cellHeight * 0.65 - height: cellHeight * 0.5 + width: mainWindow.tbCellHeight * 0.65 + height: mainWindow.tbCellHeight * 0.5 opacity: _controller.remoteRSSI < 1 ? 0.5 : 1 anchors.verticalCenter: parent.verticalCenter } SignalStrength { - size: cellHeight * 0.5 + size: mainWindow.tbCellHeight * 0.5 percent: _controller.remoteRSSI anchors.verticalCenter: parent.verticalCenter } @@ -235,11 +235,11 @@ Row { Item { id: batteryStatus width: battRow.width * 1.1 - height: cellHeight + height: mainWindow.tbCellHeight opacity: (activeVehicle.batteryVoltage > 0) ? 1 : 0.5 Row { id: battRow - height: cellHeight + height: mainWindow.tbCellHeight spacing: tbSpacing anchors.horizontalCenter: parent.horizontalCenter Column { @@ -285,7 +285,7 @@ Row { //-- Vehicle Selector QGCButton { width: ScreenTools.defaultFontPixelSize * 12 - height: cellHeight * 0.75 + height: mainWindow.tbButtonWidth text: "Vehicle " + activeVehicle.id visible: vehicleMenuItems.length > 0 anchors.verticalCenter: parent.verticalCenter @@ -340,7 +340,7 @@ Row { Item { width: selectorRow.width * 1.1 - height: cellHeight + height: mainWindow.tbCellHeight anchors.verticalCenter: parent.verticalCenter Row { id: selectorRow @@ -348,8 +348,8 @@ Row { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter Image { - width: cellHeight * 0.65 - height: cellHeight * 0.65 + width: mainWindow.tbCellHeight * 0.65 + height: mainWindow.tbCellHeight * 0.65 fillMode: Image.PreserveAspectFit mipmap: true smooth: true @@ -417,15 +417,15 @@ Row { Item { width: armCol.width * 1.1 - height: cellHeight + height: mainWindow.tbCellHeight anchors.verticalCenter: parent.verticalCenter Row { id: armCol spacing: tbSpacing * 0.5 anchors.verticalCenter: parent.verticalCenter Image { - width: cellHeight * 0.5 - height: cellHeight * 0.5 + width: mainWindow.tbCellHeight * 0.5 + height: mainWindow.tbCellHeight * 0.5 fillMode: Image.PreserveAspectFit mipmap: true smooth: true @@ -476,7 +476,7 @@ Row { Rectangle { id: rssiRC width: getProportionalDimmension(55) - height: cellHeight + height: mainWindow.tbCellHeight visible: _controller.remoteRSSI <= 100 anchors.verticalCenter: parent.verticalCenter color: getRSSIColor(_controller.remoteRSSI); @@ -484,7 +484,7 @@ Row { border.width: 0 Image { source: "qrc:/res/AntennaRC"; - width: cellHeight * 0.7 + width: mainWindow.tbCellHeight * 0.7 fillMode: Image.PreserveAspectFit anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left @@ -507,7 +507,7 @@ Row { Rectangle { id: rssiTelemetry width: getProportionalDimmension(80) - height: cellHeight + height: mainWindow.tbCellHeight visible: (_controller.telemetryRRSSI > 0) && (_controller.telemetryLRSSI > 0) anchors.verticalCenter: parent.verticalCenter color: getRSSIColor(Math.min(_controller.telemetryRRSSI,_controller.telemetryLRSSI)); @@ -515,7 +515,7 @@ Row { border.width: 0 Image { source: "qrc:/res/AntennaT"; - width: cellHeight * 0.7 + width: mainWindow.tbCellHeight * 0.7 fillMode: Image.PreserveAspectFit anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left