FreeKill/qml/main.qml

129 lines
2.9 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: ({
2022-03-02 12:56:37 +00:00
"ErrorMsg": function(jsonData) {
toast.show(jsonData);
2022-03-01 05:18:00 +00:00
mainWindow.busy = false;
},
2022-03-02 12:56:37 +00:00
"EnterLobby": function(jsonData) {
2022-03-01 05:18:00 +00:00
if (mainStack.depth === 1) {
mainStack.push(lobby);
}
mainWindow.busy = false;
},
2022-03-02 12:56:37 +00:00
"EnterRoom": function(jsonData) {
2022-03-01 05:18:00 +00:00
mainStack.push(room);
mainWindow.busy = false;
2022-03-01 09:40:02 +00:00
},
2022-03-02 12:56:37 +00:00
"UpdateRoomList": function(jsonData) {
2022-03-01 09:40:02 +00:00
let current = mainStack.currentItem; // should be lobby
current.roomModel.clear();
2022-03-02 12:56:37 +00:00
JSON.parse(jsonData).forEach(function(room) {
current.roomModel.append({
roomId: room[0],
roomName: room[1],
gameMode: room[2],
playerNum: room[3],
capacity: room[4],
});
2022-03-01 09:40:02 +00:00
});
}
})
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
2022-03-02 12:56:37 +00:00
function onNotifyUI(command, jsonData) {
let cb = callbacks[command]
if (typeof(cb) === "function") {
2022-03-02 12:56:37 +00:00
cb(jsonData);
} else {
2022-03-02 12:56:37 +00:00
callbacks["ErrorMsg"]("Unknown command " + command + "!");
}
}
}
}