magpie/qml/Welcome.qml

115 lines
3.4 KiB
QML

// SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import magpie
import magpie.Forms as Forms
import magpie.Components as Components
Page {
id: page
QtObject {
id: priv
property bool loggingIn: false
}
signal pickServer(address: string)
// title: qsTr("Welcome")
Column {
id: column
anchors.centerIn: parent
spacing: 5
Label {
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Welcome to Magpie!")
font {
pixelSize: 22
bold: true
}
}
Row {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 5
Label {
horizontalAlignment: Label.AlignRight
text: qsTr("Current server:")
}
Label {
horizontalAlignment: Label.AlignLeft
text: Magpie.state === Magpie.NoServer ? qsTr("choose") : Magpie.address
font {
italic: true
underline: true
}
MouseArea {
anchors.fill: parent
onClicked: pickServer(Magpie.address)
}
}
}
Components.Modal {
inProgress: Magpie.state === Magpie.Authenticating
visible: !priv.loggingIn && Magpie.state === Magpie.Authenticating
closable: Magpie.state === Magpie.NotAuthenticated
status: "Logging into " + Magpie.address + "..."
}
Item {
visible: priv.loggingIn || Magpie.state === Magpie.NotAuthenticated || Magpie.state === Magpie.Authenticating
width: page.width
height: stack.currentItem ? stack.currentItem.implicitHeight: 0
StackView {
property string pendingLogin: ""
property string pendingPassword: ""
id: stack
initialItem: loginForm
anchors.fill: parent
anchors.topMargin: 20
Component {
id: loginForm
Forms.Login {
onRegister: stack.replace(registerForm)
onLoggingIn: function (value) {
priv.loggingIn = value;
}
Component.onCompleted: {
if (stack.pendingLogin && stack.pendingPassword)
this.login(stack.pendingLogin, stack.pendingPassword)
stack.pendingLogin = "";
stack.pendingPassword = "";
}
Component.onDestruction: priv.loggingIn = false
}
}
Component {
id: registerForm
Forms.Register {
onLogin: stack.replace(loginForm, StackView.PopTransition)
onSuccess: function(login, password) {
stack.pendingLogin = login;
stack.pendingPassword = password;
stack.replace(loginForm, StackView.PopTransition);
}
}
}
}
}
}
}