mirror of https://github.com/qt/qtgrpc.git
152 lines
4.1 KiB
QML
152 lines
4.1 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// Copyright (C) 2019 Alexey Edelev <semlanik@gmail.com>
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
|
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
|
|
import qtgrpc.examples.chat
|
|
|
|
ApplicationWindow {
|
|
id: mainWindow
|
|
visible: true
|
|
width: 640
|
|
height: 480
|
|
minimumWidth: 640
|
|
minimumHeight: 480
|
|
title: qsTr("Simple Chat")
|
|
Rectangle {
|
|
id: background
|
|
anchors.fill: parent
|
|
color: "#09102b"
|
|
}
|
|
|
|
Row {
|
|
spacing: 10
|
|
anchors {
|
|
top: parent.top
|
|
topMargin: 10
|
|
left: parent.left
|
|
leftMargin: 20
|
|
}
|
|
Image {
|
|
source: "qrc:/qt_logo_green_64x64px.png"
|
|
width: implicitWidth
|
|
height: implicitHeight
|
|
}
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
color: "#f3f3f4"
|
|
font.pointSize: 20
|
|
text: qsTr("Chat")
|
|
}
|
|
}
|
|
|
|
Column {
|
|
id: loginControl
|
|
spacing: 5
|
|
visible: SimpleChatEngine.state !== SimpleChatEngine.Connected
|
|
anchors.centerIn: parent
|
|
enabled: SimpleChatEngine.state === SimpleChatEngine.Disconnected
|
|
ChatInputField {
|
|
id: loginField
|
|
width: 200
|
|
placeholderText: qsTr("Login")
|
|
onAccepted: {
|
|
SimpleChatEngine.login(loginField.text, passwordField.text)
|
|
}
|
|
onVisibleChanged: {
|
|
if (loginControl.visible) {
|
|
loginField.forceActiveFocus()
|
|
}
|
|
}
|
|
Component.onCompleted: {
|
|
if (loginControl.visible) {
|
|
loginField.forceActiveFocus()
|
|
}
|
|
}
|
|
}
|
|
ChatInputField {
|
|
id: passwordField
|
|
echoMode: TextInput.Password
|
|
placeholderText: qsTr("Password")
|
|
onAccepted: {
|
|
SimpleChatEngine.login(loginField.text, passwordField.text)
|
|
}
|
|
}
|
|
Button {
|
|
id: loginButton
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: enterText.implicitWidth + 20
|
|
height: 40
|
|
background: Rectangle {
|
|
radius: 5
|
|
border {
|
|
width: 1
|
|
color: loginButton.pressed ? "#41cd52" : "#f3f3f4"
|
|
}
|
|
color:"#53586b"
|
|
Text {
|
|
id: enterText
|
|
text : qsTr("Enter")
|
|
color: "#f3f3f4"
|
|
anchors.centerIn: parent
|
|
font.pointSize: 14
|
|
}
|
|
}
|
|
|
|
onClicked: {
|
|
SimpleChatEngine.login(loginField.text, passwordField.text)
|
|
}
|
|
}
|
|
}
|
|
|
|
ChatView {
|
|
id: chatView
|
|
visible: SimpleChatEngine.state === SimpleChatEngine.Connected
|
|
}
|
|
|
|
Text {
|
|
id: connectingText
|
|
visible: SimpleChatEngine.state === SimpleChatEngine.Connecting
|
|
anchors.top: loginControl.bottom
|
|
anchors.topMargin: 10
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: qsTr("Connecting...")
|
|
font.pointSize: 14
|
|
color: "#f3f3f4"
|
|
}
|
|
|
|
Text {
|
|
id: authFailedText
|
|
visible: false
|
|
anchors.top: loginControl.bottom
|
|
anchors.topMargin: 10
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: qsTr("This username with this password doesn't exists.")
|
|
font.pointSize: 14
|
|
color: "#f3f3f4"
|
|
onVisibleChanged: {
|
|
if (authFailedText.visible) {
|
|
fadeOutTimer.restart()
|
|
} else {
|
|
fadeOutTimer.stop()
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
id: fadeOutTimer
|
|
onTriggered: {
|
|
authFailedText.visible = false
|
|
}
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: SimpleChatEngine
|
|
function onAuthFailed() {
|
|
authFailedText.visible = true;
|
|
}
|
|
}
|
|
}
|