flightgear/utils/fgqcanvas/qml/CanvasFrame.qml
2022-10-20 20:29:11 +08:00

154 lines
4.0 KiB
QML

import QtQuick 2.0
import FlightGear 1.0 as FG
Item {
id: root
property bool showDecorations: true
property alias canvas: paintedDisplay.canvas
property bool showUi: true
property bool showMenu: false
Component.onCompleted: {
if (canvas) {
width = canvas.size.width
height = canvas.size.height
x = canvas.origin.x
y = canvas.origin.y
}
}
function saveGeometry()
{
canvas.origin = Qt.point(x, y )
canvas.size = Qt.size(root.width, root.height);
}
Item {
id: clipShell
anchors.fill: parent
clip: true
// FG.CanvasDisplay {
// id: canvasDisplay
// anchors.fill: parent
// onCanvasChanged: {
// if (canvas) {
// root.width = canvas.size.width
// root.height = canvas.size.height
// root.x = canvas.origin.x
// root.y = canvas.origin.y
// }
// }
// }
FG.PaintedCanvasDisplay {
id: paintedDisplay
anchors.fill: parent
// canvas: canvasDisplay.canvas
onCanvasChanged: {
if (canvas) {
root.width = canvas.size.width
root.height = canvas.size.height
root.x = canvas.origin.x
root.y = canvas.origin.y
}
}
}
}
Rectangle {
border.width: 1
border.color: "orange"
color: "transparent"
anchors.centerIn: parent
width: parent.width
height: parent.height
visible: showUi
MouseArea {
anchors.fill: parent
drag.target: root
onReleased: {
root.saveGeometry();
}
onPressAndHold: {
root.showMenu = true;
}
}
Rectangle {
width: 32
height: 32
color: "orange"
opacity: 0.5
anchors.right: parent.right
anchors.bottom: parent.bottom
MouseArea {
anchors.fill: parent
// resizing
onPositionChanged: {
var rootPos = mapToItem(root, mouse.x, mouse.y);
// var rootDiff = Qt.point(rootPos.x - root.x,
// rootPos.y - root.y);
root.width = rootPos.x;
root.height = rootPos.y;
}
onReleased: {
saveGeometry();
}
}
}
Text {
color: "orange"
anchors.centerIn: parent
text: "Canvas"
visible: !root.showMenu
}
Text {
anchors.fill: parent
verticalAlignment: Text.AlignBottom
function statusAsString(status)
{
switch (status) {
case FG.CanvasConnection.NotConnected: return "Not connected";
case FG.CanvasConnection.Connecting: return "Connecting";
case FG.CanvasConnection.Connected: return "Connected";
case FG.CanvasConnection.Closed: return "Closed";
case FG.CanvasConnection.Reconnecting: return "Re-connecting";
case FG.CanvasConnection.Error: return "Error";
case FG.CanvasConnection.Snapshot: return "Snapshot";
}
}
text: "WS: " + canvas.webSocketUrl + "\n"
+ "Root:" + canvas.rootPath + "\n"
+ "Status:" + statusAsString(canvas.status);
color: "white"
}
CanvasMenu {
anchors.fill:parent
visible: root.showMenu
onMenuBack: root.showMenu = false
onCloseCanvas: _application.closeCanvas(canvas);
onReconnectCanvas: canvas.reconnect();
}
}
}