Newer
Older
/****************************************************************************
*
* (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.
*
****************************************************************************/
import QtQuick 2.3
import QtQuick.Controls 1.2
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
// As a percentage of the window width
property real maxSize: 0.75
property real minSize: 0.10
property bool enablePopup: true
signal activated()
signal hideIt(bool state)
signal newWidth(real newWidth)
id: pipMouseArea
anchors.fill: parent
enabled: !isHidden
hoverEnabled: true
onClicked: {
pip.activated()
}
}
// MouseArea to drag in order to resize the PiP area
MouseArea {
id: pipResize
anchors.top: parent.top
anchors.right: parent.right
height: ScreenTools.minTouchPixels
property var initialX: 0
property var initialWidth: 0
onClicked: {
// TODO propagate
}
// When we push the mouse button down, we un-anchor the mouse area to prevent a resizing loop
onPressed: {
pipResize.anchors.top = undefined // Top doesn't seem to 'detach'
pipResize.anchors.right = undefined // This one works right, which is what we really need
pipResize.initialX = mouse.x
pipResize.initialWidth = pip.width
}
// When we let go of the mouse button, we re-anchor the mouse area in the correct position
onReleased: {
pipResize.anchors.top = pip.top
pipResize.anchors.right = pip.right
}
// Drag
onPositionChanged: {
if (pipResize.pressed) {
var parentW = pip.parent.width // flightView
var newW = pipResize.initialWidth + mouse.x - pipResize.initialX
if (newW < parentW * maxSize && newW > parentW * minSize) {
newWidth(newW)
}
}
}
// Resize icon
Image {
source: "/qmlimages/pipResize.svg"
fillMode: Image.PreserveAspectFit
mipmap: true
anchors.right: parent.right
anchors.top: parent.top
visible: !isHidden && (ScreenTools.isMobile || pipMouseArea.containsMouse) && !inPopup
height: ScreenTools.defaultFontPixelHeight * 2.5
width: ScreenTools.defaultFontPixelHeight * 2.5
sourceSize.height: height
}
// Resize pip window if necessary when main window is resized
property var pipLock: 2
Connections {
target: pip.parent
onWidthChanged: {
// hackity hack...
// don't fire this while app is loading/initializing (it happens twice)
if (pipLock) {
pipLock--
return
}
var parentW = pip.parent.width
if (pip.width > parentW * maxSize) {
newWidth(parentW * maxSize)
} else if (pip.width < parentW * minSize) {
newWidth(parentW * minSize)
}
}
//-- PIP Popup Indicator
Image {
id: popupPIP
source: "/qmlimages/PiP.svg"
mipmap: true
fillMode: Image.PreserveAspectFit
anchors.left: parent.left
anchors.top: parent.top
visible: !isHidden && !inPopup && !ScreenTools.isMobile && enablePopup && pipMouseArea.containsMouse
height: ScreenTools.defaultFontPixelHeight * 2.5
width: ScreenTools.defaultFontPixelHeight * 2.5
sourceSize.height: height
MouseArea {
anchors.fill: parent
onClicked: {
inPopup = true
pip.popup()
}
}
}
//-- PIP Corner Indicator
Image {
id: closePIP
mipmap: true
fillMode: Image.PreserveAspectFit
anchors.left: parent.left
anchors.bottom: parent.bottom
visible: !isHidden && (ScreenTools.isMobile || pipMouseArea.containsMouse)
height: ScreenTools.defaultFontPixelHeight * 2.5
width: ScreenTools.defaultFontPixelHeight * 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.defaultFontPixelHeight * 2
width: ScreenTools.defaultFontPixelHeight * 2
radius: ScreenTools.defaultFontPixelHeight / 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)
}
}
}
}