FlightDisplayViewVideo.qml 5.99 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 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.
 *
 ****************************************************************************/
9 10


11 12
import QtQuick                          2.11
import QtQuick.Controls                 2.4
13

14 15 16 17 18 19 20 21
import QGroundControl                   1.0
import QGroundControl.FlightDisplay     1.0
import QGroundControl.FlightMap         1.0
import QGroundControl.ScreenTools       1.0
import QGroundControl.Controls          1.0
import QGroundControl.Palette           1.0
import QGroundControl.Vehicle           1.0
import QGroundControl.Controllers       1.0
22

dogmaphobic's avatar
dogmaphobic committed
23 24
Item {
    id: root
25
    property double _ar:                QGroundControl.videoManager.aspectRatio
26
    property bool   _showGrid:          QGroundControl.settingsManager.videoSettings.gridLines.rawValue > 0
27 28
    property var    _videoReceiver:     QGroundControl.videoManager.videoReceiver
    property var    _activeVehicle:     QGroundControl.multiVehicleManager.activeVehicle
29 30
    property var    _dynamicCameras:    _activeVehicle ? _activeVehicle.dynamicCameras : null
    property bool   _connected:         _activeVehicle ? !_activeVehicle.connectionLost : false
31 32 33
    property int    _curCameraIndex:    _dynamicCameras ? _dynamicCameras.currentCamera : 0
    property bool   _isCamera:          _dynamicCameras ? _dynamicCameras.cameras.count > 0 : false
    property var    _camera:            _isCamera ? _dynamicCameras.cameras.get(_curCameraIndex) : null
34
    property bool   _hasZoom:           _camera && _camera.hasZoom
35
    property int    _fitMode:           QGroundControl.settingsManager.videoSettings.videoFit.rawValue
dogmaphobic's avatar
dogmaphobic committed
36 37 38
    Rectangle {
        id:             noVideo
        anchors.fill:   parent
dogmaphobic's avatar
dogmaphobic committed
39
        color:          Qt.rgba(0,0,0,0.75)
40
        visible:        !(_videoReceiver && _videoReceiver.videoRunning)
dogmaphobic's avatar
dogmaphobic committed
41
        QGCLabel {
42
            text:               QGroundControl.settingsManager.videoSettings.streamEnabled.rawValue ? qsTr("WAITING FOR VIDEO") : qsTr("VIDEO DISABLED")
43
            font.family:        ScreenTools.demiboldFontFamily
dogmaphobic's avatar
dogmaphobic committed
44
            color:              "white"
dogmaphobic's avatar
dogmaphobic committed
45
            font.pointSize:     _mainIsMap ? ScreenTools.smallFontPointSize : ScreenTools.largeFontPointSize
dogmaphobic's avatar
dogmaphobic committed
46 47
            anchors.centerIn:   parent
        }
48 49 50 51 52 53
        MouseArea {
            anchors.fill: parent
            onDoubleClicked: {
                QGroundControl.videoManager.fullScreen = !QGroundControl.videoManager.fullScreen
            }
        }
dogmaphobic's avatar
dogmaphobic committed
54
    }
55
    Rectangle {
dogmaphobic's avatar
dogmaphobic committed
56
        anchors.fill:   parent
57
        color:          "black"
58
        visible:        _videoReceiver && _videoReceiver.videoRunning
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        function getWidth() {
            //-- Fit Width or Stretch
            if(_fitMode === 0 || _fitMode === 2) {
                return parent.width
            }
            //-- Fit Height
            return _ar != 0.0 ? parent.height * _ar : parent.width
        }
        function getHeight() {
            //-- Fit Height or Stretch
            if(_fitMode === 1 || _fitMode === 2) {
                return parent.height
            }
            //-- Fit Width
            return _ar != 0.0 ? parent.width * (1 / _ar) : parent.height
        }
75
        QGCVideoBackground {
76
            id:             videoContent
77 78
            height:         parent.getHeight()
            width:          parent.getWidth()
79
            anchors.centerIn: parent
80 81 82
            receiver:       _videoReceiver
            display:        _videoReceiver && _videoReceiver.videoSurface
            visible:        _videoReceiver && _videoReceiver.videoRunning
83
            Connections {
84
                target:         _videoReceiver
85 86
                onImageFileChanged: {
                    videoContent.grabToImage(function(result) {
87
                        if (!result.saveToFile(_videoReceiver.imageFile)) {
88 89 90 91 92
                            console.error('Error capturing video frame');
                        }
                    });
                }
            }
93 94 95 96 97
            Rectangle {
                color:  Qt.rgba(1,1,1,0.5)
                height: parent.height
                width:  1
                x:      parent.width * 0.33
98
                visible: _showGrid && !QGroundControl.videoManager.fullScreen
99 100 101 102 103 104
            }
            Rectangle {
                color:  Qt.rgba(1,1,1,0.5)
                height: parent.height
                width:  1
                x:      parent.width * 0.66
105
                visible: _showGrid && !QGroundControl.videoManager.fullScreen
106 107 108 109 110 111
            }
            Rectangle {
                color:  Qt.rgba(1,1,1,0.5)
                width:  parent.width
                height: 1
                y:      parent.height * 0.33
112
                visible: _showGrid && !QGroundControl.videoManager.fullScreen
113 114 115 116 117 118
            }
            Rectangle {
                color:  Qt.rgba(1,1,1,0.5)
                width:  parent.width
                height: 1
                y:      parent.height * 0.66
119
                visible: _showGrid && !QGroundControl.videoManager.fullScreen
120
            }
dogmaphobic's avatar
dogmaphobic committed
121
        }
122 123 124 125
        MouseArea {
            anchors.fill: parent
            onDoubleClicked: {
                QGroundControl.videoManager.fullScreen = !QGroundControl.videoManager.fullScreen
126
            }
dogmaphobic's avatar
dogmaphobic committed
127
        }
128 129 130 131 132 133 134 135 136 137 138 139 140 141
        PinchArea {
            id:             pinchZoom
            enabled:        _hasZoom
            anchors.fill:   parent
            onPinchStarted: pinchZoom.zoom = 0
            onPinchUpdated: {
                if(_hasZoom) {
                    var z = 0
                    if(pinch.scale < 1) {
                        z = Math.round(pinch.scale * -10)
                    } else {
                        z = Math.round(pinch.scale)
                    }
                    if(pinchZoom.zoom != z) {
142
                        _camera.stepZoom(z)
143 144 145 146 147
                    }
                }
            }
            property int zoom: 0
        }
148 149
    }
}