You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.2 KiB
166 lines
5.2 KiB
/**************************************************************************** |
|
* |
|
* (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 |
|
|
|
signal activated() |
|
signal hideIt(bool state) |
|
signal newWidth(real newWidth) |
|
|
|
MouseArea { |
|
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 |
|
width: height |
|
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 && pipMouseArea.containsMouse |
|
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 Corner Indicator |
|
Image { |
|
id: closePIP |
|
source: "/qmlimages/PiP.svg" |
|
mipmap: true |
|
fillMode: Image.PreserveAspectFit |
|
anchors.left: parent.left |
|
anchors.bottom: parent.bottom |
|
visible: !isHidden && pipMouseArea.containsMouse |
|
height: ScreenTools.defaultFontPixelHeight * 2.5 |
|
width: ScreenTools.defaultFontPixelHeight * 2.5 |
|
sourceSize.height: height |
|
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 |
|
sourceSize.height: height |
|
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) |
|
} |
|
} |
|
} |
|
}
|
|
|