diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index ec358523264a48d8353aef8c1f7bde62d5cf7db8..7e73bdfa123334127a8083887171c71d8e83d09d 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -59,6 +59,7 @@
src/QmlControls/QGCCheckBox.qml
src/QmlControls/QGCColoredImage.qml
src/QmlControls/QGCFlickable.qml
+ src/QmlControls/QGCPipable.qml
src/QmlControls/QGCFlickableVerticalIndicator.qml
src/QmlControls/QGCFlickableHorizontalIndicator.qml
src/QmlControls/QGCComboBox.qml
diff --git a/src/FlightDisplay/FlightDisplayView.qml b/src/FlightDisplay/FlightDisplayView.qml
index 3a92eaa7da398c01d5ef9f6b017778e2bb5b1b3b..14d6727d1b3d0bcb649111013a4541d838f8ab41 100644
--- a/src/FlightDisplay/FlightDisplayView.qml
+++ b/src/FlightDisplay/FlightDisplayView.qml
@@ -47,7 +47,7 @@ Item {
readonly property bool isBackgroundDark: _mainIsMap ? (_flightMap ? _flightMap.isSatelliteMap : true) : true
- property var _activeVehicle: multiVehicleManager.activeVehicle
+ property var _activeVehicle: multiVehicleManager.activeVehicle
readonly property real _defaultRoll: 0
readonly property real _defaultPitch: 0
@@ -74,145 +74,140 @@ Item {
property real _airSpeed: _activeVehicle ? _activeVehicle.airSpeed : _defaultAirSpeed
property real _climbRate: _activeVehicle ? _activeVehicle.climbRate : _defaultClimbRate
- property var _flightMap: null
- property var _flightVideo: null
property var _savedZoomLevel: 0
- property real _pipSize: mainWindow.width * 0.2
+ property real pipSize: mainWindow.width * 0.2
FlightDisplayViewController { id: _controller }
- function reloadContents() {
- if(_flightVideo) {
- _flightVideo.visible = false
- }
+ function setStates() {
if(_mainIsMap) {
- mainLoader.source = "FlightDisplayViewMap.qml"
- pipLoader.source = "FlightDisplayViewVideo.qml"
+ //-- Adjust Margins
+ _flightMapContainer.state = "fullMode"
+ _flightVideo.state = "pipMode"
+ //-- Save/Restore Map Zoom Level
+ if(_savedZoomLevel != 0)
+ _flightMap.zoomLevel = _savedZoomLevel
+ else
+ _savedZoomLevel = _flightMap.zoomLevel
} else {
- mainLoader.source = "FlightDisplayViewVideo.qml"
- pipLoader.source = "FlightDisplayViewMap.qml"
+ //-- Adjust Margins
+ _flightMapContainer.state = "pipMode"
+ _flightVideo.state = "fullMode"
+ //-- Set Map Zoom Level
+ _savedZoomLevel = _flightMap.zoomLevel
+ _flightMap.zoomLevel = _savedZoomLevel - 3
}
}
- Component.onCompleted: {
- reloadContents();
- widgetsLoader.source = "FlightDisplayViewWidgets.qml"
+ function setPipVisibility(state) {
+ _isPipVisible = state;
+ QGroundControl.saveBoolGlobalSetting(_PIPVisibleKey, state)
}
- //-- Main Window
- Loader {
- id: mainLoader
- anchors.fill: parent
- onLoaded: {
- if(_mainIsMap) {
- _flightMap = item
- if(_savedZoomLevel != 0)
- _flightMap.zoomLevel = _savedZoomLevel
- else
- _savedZoomLevel = _flightMap.zoomLevel
- } else {
- _flightVideo = item
- }
- }
+ Component.onCompleted: {
+ widgetsLoader.source = "FlightDisplayViewWidgets.qml"
+ setStates()
}
- //-- PIP Window
+ //-- Map View
+ // For whatever reason, if FlightDisplayViewMap is the root item, changing
+ // width/height has no effect.
Item {
- id: pip
- visible: _controller.hasVideo && _isPipVisible
- anchors.margins: ScreenTools.defaultFontPixelHeight
- anchors.left: parent.left
- anchors.bottom: parent.bottom
- width: _pipSize
- height: _pipSize * (9/16)
- Loader {
- id: pipLoader
- anchors.fill: parent
- onLoaded: {
- if(_mainIsMap) {
- _flightVideo = item
- } else {
- _flightMap = item
- _savedZoomLevel = _flightMap.zoomLevel
- _flightMap.zoomLevel = _savedZoomLevel - 3
+ id: _flightMapContainer
+ z: _mainIsMap ? root.z + 1 : root.z + 2
+ anchors.left: root.left
+ anchors.bottom: root.bottom
+ visible: _mainIsMap || _isPipVisible
+ width: _mainIsMap ? root.width : pipSize
+ height: _mainIsMap ? root.height : pipSize * (9/16)
+ states: [
+ State {
+ name: "pipMode"
+ PropertyChanges {
+ target: _flightMapContainer
+ anchors.margins: ScreenTools.defaultFontPixelHeight
+ }
+ },
+ State {
+ name: "fullMode"
+ PropertyChanges {
+ target: _flightMapContainer
+ anchors.margins: 0
}
}
+ ]
+ FlightDisplayViewMap {
+ id: _flightMap
+ anchors.fill: parent
}
- MouseArea {
- anchors.fill: parent
- onClicked: {
- _mainIsMap = !_mainIsMap
- reloadContents();
- QGroundControl.saveBoolGlobalSetting(_mainIsMapKey, _mainIsMap)
- }
- }
- Image {
- id: closePIP
- source: "/qmlimages/PiP.svg"
- mipmap: true
- fillMode: Image.PreserveAspectFit
- anchors.left: parent.left
- anchors.bottom: parent.bottom
- height: ScreenTools.defaultFontPixelSize * 2.5
- width: ScreenTools.defaultFontPixelSize * 2.5
- MouseArea {
- anchors.fill: parent
- onClicked: {
- _isPipVisible = false
- QGroundControl.saveBoolGlobalSetting(_PIPVisibleKey, false)
+ }
+
+ //-- Video View
+ FlightDisplayViewVideo {
+ id: _flightVideo
+ z: _mainIsMap ? root.z + 2 : root.z + 1
+ width: !_mainIsMap ? root.width : pipSize
+ height: !_mainIsMap ? root.height : pipSize * (9/16)
+ anchors.left: root.left
+ anchors.bottom: root.bottom
+ visible: _controller.hasVideo && (!_mainIsMap || _isPipVisible)
+ states: [
+ State {
+ name: "pipMode"
+ PropertyChanges {
+ target: _flightVideo
+ anchors.margins: ScreenTools.defaultFontPixelHeight
+ }
+ },
+ State {
+ name: "fullMode"
+ PropertyChanges {
+ target: _flightVideo
+ anchors.margins: 0
}
}
- }
+ ]
}
- //-- Show PIP
- Rectangle {
- id: openPIP
- anchors.left : parent.left
- anchors.bottom: parent.bottom
- anchors.margins: ScreenTools.defaultFontPixelHeight
- height: ScreenTools.defaultFontPixelSize * 2
- width: ScreenTools.defaultFontPixelSize * 2
- radius: ScreenTools.defaultFontPixelSize / 3
- visible: _controller.hasVideo && !_isPipVisible
- 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: "/res/buttonRight.svg"
- mipmap: true
- fillMode: Image.PreserveAspectFit
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
+ QGCPipable {
+ id: _flightVideoPipControl
+ z: _flightVideo.z + 3
+ width: pipSize
+ height: pipSize * (9/16)
+ anchors.left: root.left
+ anchors.bottom: root.bottom
+ anchors.margins: ScreenTools.defaultFontPixelHeight
+ isHidden: !_isPipVisible
+ isDark: isBackgroundDark
+ onActivated: {
+ _mainIsMap = !_mainIsMap
+ setStates()
}
- MouseArea {
- anchors.fill: parent
- onClicked: {
- _isPipVisible = true
- QGroundControl.saveBoolGlobalSetting(_PIPVisibleKey, true)
- }
+ onHideIt: {
+ setPipVisibility(!state)
}
}
//-- Widgets
Loader {
id: widgetsLoader
+ z: root.z + 4
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
height: availableHeight
-
property bool isBackgroundDark: root.isBackgroundDark
}
//-- Virtual Joystick
Item {
id: multiTouchItem
- width: parent.width - (pip.width / 2)
+ z: root.z + 5
+ width: parent.width - (_flightVideoPipControl.width / 2)
height: thumbAreaHeight
visible: QGroundControl.virtualTabletJoystick
- anchors.bottom: pip.top
+ anchors.bottom: _flightVideoPipControl.top
anchors.bottomMargin: ScreenTools.defaultFontPixelHeight * 2
anchors.horizontalCenter: parent.horizontalCenter
diff --git a/src/FlightDisplay/FlightDisplayViewWidgets.qml b/src/FlightDisplay/FlightDisplayViewWidgets.qml
index 57ae97a8eb63279415b05b43b47711dca9f4ea12..823407ff24cc2e2856e18d280a68eb2c21c93376 100644
--- a/src/FlightDisplay/FlightDisplayViewWidgets.qml
+++ b/src/FlightDisplay/FlightDisplayViewWidgets.qml
@@ -118,8 +118,8 @@ Item {
anchors.margins: ScreenTools.defaultFontPixelHeight
anchors.right: parent.right
anchors.bottom: parent.bottom
- width: _pipSize
- height: _pipSize * (9/16)
+ width: pipSize
+ height: pipSize * (9/16)
color: Qt.rgba(0,0,0,0.75)
Column {
id: instruments
diff --git a/src/FlightDisplay/qmldir b/src/FlightDisplay/qmldir
index a7c889fd49fca48c2977a4eb0d096ab319d9d0be..68ea784d7ebd8050175949dc10d5a1b62d48b962 100644
--- a/src/FlightDisplay/qmldir
+++ b/src/FlightDisplay/qmldir
@@ -1,4 +1,5 @@
Module QGroundControl.FlightDisplay
FlightDisplayView 1.0 FlightDisplayView.qml
+FlightDisplayViewMap 1.0 FlightDisplayViewMap.qml
diff --git a/src/QmlControls/QGCPipable.qml b/src/QmlControls/QGCPipable.qml
new file mode 100644
index 0000000000000000000000000000000000000000..29de052b9938273ea73a920312759172bb50ed2c
--- /dev/null
+++ b/src/QmlControls/QGCPipable.qml
@@ -0,0 +1,94 @@
+/*=====================================================================
+
+QGroundControl Open Source Ground Control Station
+
+(c) 2009, 2016 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.3
+
+import QGroundControl 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.Controls 1.0
+import QGroundControl.Palette 1.0
+
+Item {
+ id: pip
+
+ property bool isHidden: false
+ property bool isDark: false
+
+ signal activated()
+ signal hideIt(bool state)
+
+ MouseArea {
+ anchors.fill: parent
+ enabled: !isHidden
+ onClicked: {
+ pip.activated()
+ }
+ }
+
+ //-- PIP Corner Indicator
+ Image {
+ id: closePIP
+ source: "/qmlimages/PiP.svg"
+ mipmap: true
+ fillMode: Image.PreserveAspectFit
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ visible: !isHidden
+ height: ScreenTools.defaultFontPixelSize * 2.5
+ width: ScreenTools.defaultFontPixelSize * 2.5
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ pip.hideIt(true)
+ }
+ }
+ }
+
+ //-- Show PIP
+ Rectangle {
+ id: openPIP
+ anchors.left : parent.left
+ anchors.bottom: parent.bottom
+ height: ScreenTools.defaultFontPixelSize * 2
+ width: ScreenTools.defaultFontPixelSize * 2
+ radius: ScreenTools.defaultFontPixelSize / 3
+ visible: isHidden
+ color: isDark ? 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: "/res/buttonRight.svg"
+ mipmap: true
+ fillMode: Image.PreserveAspectFit
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ pip.hideIt(false)
+ }
+ }
+ }
+}
diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir
index 8484c1444c115f578ac61a1a2c23b1db7004c927..8992d4123ac97a539f70f6b1a69a3c238660e28c 100644
--- a/src/QmlControls/QGroundControl.Controls.qmldir
+++ b/src/QmlControls/QGroundControl.Controls.qmldir
@@ -21,6 +21,7 @@ QGCComboBox 1.0 QGCComboBox.qml
QGCFlickable 1.0 QGCFlickable.qml
QGCLabel 1.0 QGCLabel.qml
QGCMovableItem 1.0 QGCMovableItem.qml
+QGCPipable 1.0 QGCPipable.qml
QGCRadioButton 1.0 QGCRadioButton.qml
QGCTextField 1.0 QGCTextField.qml
QGCToolBarButton 1.0 QGCToolBarButton.qml