FreeKill/qml/main.qml

116 lines
2.4 KiB
QML
Raw Normal View History

import QtQuick 2.15
import QtQuick.Controls 2.0
import QtQuick.Window 2.0
2022-03-01 05:18:00 +00:00
import "Pages"
Window {
id: mainWindow
visible: true
width: 720
height: 480
property var callbacks: ({
"error_msg": function(json_data) {
toast.show(json_data);
2022-03-01 05:18:00 +00:00
mainWindow.busy = false;
},
"enter_lobby": function(json_data) {
2022-03-01 05:18:00 +00:00
if (mainStack.depth === 1) {
mainStack.push(lobby);
}
mainWindow.busy = false;
},
"enter_room": function(json_data) {
mainStack.push(room);
mainWindow.busy = false;
}
})
2022-03-01 05:18:00 +00:00
StackView {
id: mainStack
visible: !mainWindow.busy
initialItem: init
anchors.fill: parent
}
2022-03-01 05:18:00 +00:00
Component {
id: init
Init {}
}
2022-03-01 05:18:00 +00:00
Component {
id: lobby
Lobby {}
}
2022-03-01 05:18:00 +00:00
Component {
id: room
Room {}
}
Component {
id: createRoom
CreateRoom {}
}
2022-03-01 05:18:00 +00:00
property bool busy: false
BusyIndicator {
running: true
anchors.centerIn: parent
2022-03-01 05:18:00 +00:00
visible: mainWindow.busy === true
}
Rectangle {
id: toast
opacity: 0
z: 998
anchors.horizontalCenter: parent.horizontalCenter
y: parent.height * 0.8
radius: 16
color: "#F2808A87"
height: toast_text.height + 20
width: toast_text.width + 40
Text {
id: toast_text
text: "FreeKill"
anchors.centerIn: parent
color: "white"
}
Behavior on opacity {
NumberAnimation {
duration: 240
easing.type: Easing.InOutQuad
}
}
SequentialAnimation {
id: keepAnim
running: toast.opacity == 1
PauseAnimation {
duration: 2800
}
ScriptAction {
script: {
2022-03-01 05:18:00 +00:00
toast.opacity = 0;
}
}
}
function show(text) {
2022-03-01 05:18:00 +00:00
opacity = 1;
toast_text.text = text;
}
}
Connections {
target: Backend
function onNotifyUI(command, json_data) {
let cb = callbacks[command]
if (typeof(cb) === "function") {
cb(json_data);
} else {
callbacks["error_msg"]("Unknown UI command " + command + "!");
}
}
}
}