linux.x86.linphone/Linphone/view/Page/Form/Register/RegisterPage.qml
Gaelle Braud 06647f002a resize the app according to screen definition
fix ui size according to screen resolution
2025-03-07 11:36:34 +01:00

347 lines
12 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import Linphone
import UtilsCpp 1.0
import ConstantsCpp 1.0
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
LoginLayout {
id: mainItem
signal returnToLogin()
signal browserValidationRequested()
readonly property string countryCode: phoneNumberInput.countryCode
readonly property string phoneNumber: phoneNumberInput.phoneNumber
readonly property string email: emailInput.text
Connections {
target: RegisterPageCpp
function onErrorInField(field, errorMessage) {
console.log("set error message", errorMessage)
if (field == "username") usernameItem.errorMessage = errorMessage
else if (field == "password") passwordItem.errorMessage = errorMessage
else if (field == "phone") phoneNumberInput.errorMessage = errorMessage
else if (field == "email") emailItem.errorMessage = errorMessage
else otherErrorText.setText(errorMessage)
}
function onRegisterNewAccountFailed(errorMessage) {
console.log("register failed", errorMessage)
otherErrorText.setText(errorMessage)
}
}
titleContent: [
RowLayout {
spacing: Math.round(21 * DefaultStyle.dp)
Layout.leftMargin: Math.round(79 * DefaultStyle.dp)
BigButton {
style: ButtonStyle.noBackground
icon.source: AppIcons.leftArrow
onClicked: {
console.debug("[RegisterPage] User: return")
returnToLogin()
}
}
EffectImage {
fillMode: Image.PreserveAspectFit
imageSource: AppIcons.profile
Layout.preferredHeight: Math.round(34 * DefaultStyle.dp)
Layout.preferredWidth: Math.round(34 * DefaultStyle.dp)
colorizationColor: DefaultStyle.main2_600
}
Text {
Layout.preferredWidth: width
text: qsTr("Inscription")
font {
pixelSize: Typography.h1.pixelSize
weight: Typography.h1.weight
}
wrapMode: Text.NoWrap
scaleLettersFactor: 1.1
}
},
Item {
Layout.fillWidth: true
},
RowLayout {
spacing: Math.round(20 * DefaultStyle.dp)
Layout.rightMargin: Math.round(51 * DefaultStyle.dp)
Text {
Layout.rightMargin: Math.round(15 * DefaultStyle.dp)
color: DefaultStyle.main2_700
text: qsTr("Déjà un compte ?")
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
BigButton {
style: ButtonStyle.main
text: qsTr("Connexion")
onClicked: {
console.debug("[RegisterPage] User: return")
returnToLogin()
}
}
}
]
centerContent: [
ColumnLayout {
anchors.fill: parent
anchors.topMargin: Math.round(51 * DefaultStyle.dp)
anchors.leftMargin: Math.round(127 * DefaultStyle.dp)
anchors.rightMargin: Math.round(127 * DefaultStyle.dp)
spacing: Math.round(50 * DefaultStyle.dp)
TabBar {
Layout.fillWidth: true
id: bar
model: [qsTr("Register with phone number"), qsTr("Register with email")]
}
Flickable {
Layout.fillWidth: true
Layout.fillHeight: true
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
spacing: Math.round(22 * DefaultStyle.dp)
ColumnLayout {
spacing: Math.round(24 * DefaultStyle.dp)
RowLayout {
Layout.preferredHeight: usernameItem.height
spacing: Math.round(16 * DefaultStyle.dp)
FormItemLayout {
id: usernameItem
label: qsTr("Username")
mandatory: true
enableErrorText: true
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
contentItem: TextField {
id: usernameInput
backgroundBorderColor: usernameItem.errorMessage.length > 0 ? DefaultStyle.danger_500main : DefaultStyle.grey_200
}
}
RowLayout {
spacing: Math.round(10 * DefaultStyle.dp)
ComboBox {
Layout.preferredWidth: Math.round(210 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(49 * DefaultStyle.dp)
enabled: false
model: [{text:"@sip.linphone.org"}]
}
EffectImage {
Layout.preferredWidth: Math.round(16 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(16 * DefaultStyle.dp)
imageSource: AppIcons.lock
colorizationColor: DefaultStyle.main2_600
}
}
}
StackLayout {
currentIndex: bar.currentIndex
PhoneNumberInput {
id: phoneNumberInput
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
property string completePhoneNumber: countryCode + phoneNumber
label: qsTr("Numéro de téléphone")
enableErrorText: true
mandatory: true
placeholderText: "Phone number"
defaultCallingCode: "33"
}
FormItemLayout {
id: emailItem
Layout.fillWidth: false
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
label: qsTr("Email")
mandatory: true
enableErrorText: true
contentItem: TextField {
id: emailInput
backgroundBorderColor: emailItem.errorMessage.length > 0 ? DefaultStyle.danger_500main : DefaultStyle.grey_200
}
}
}
ColumnLayout {
spacing: 0
Layout.preferredHeight: rowlayout.height
clip: false
RowLayout {
id: rowlayout
spacing: Math.round(16 * DefaultStyle.dp)
FormItemLayout {
id: passwordItem
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
label: qsTr("Mot de passe")
mandatory: true
enableErrorText: true
contentItem: TextField {
id: pwdInput
hidden: true
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
backgroundBorderColor: passwordItem.errorMessage.length > 0 ? DefaultStyle.danger_500main : DefaultStyle.grey_200
}
}
FormItemLayout {
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
label: qsTr("Confirmation mot de passe")
mandatory: true
enableErrorText: true
contentItem: TextField {
id: confirmPwdInput
hidden: true
Layout.preferredWidth: Math.round(346 * DefaultStyle.dp)
backgroundBorderColor: passwordItem.errorMessage.length > 0 ? DefaultStyle.danger_500main : DefaultStyle.grey_200
}
}
}
TemporaryText {
id: otherErrorText
Layout.fillWidth: true
Layout.topMargin: Math.round(5 * DefaultStyle.dp)
onTextChanged: console.log("set error", text)
}
}
}
// ColumnLayout {
// spacing: Math.round(18 * DefaultStyle.dp)
// RowLayout {
// spacing: Math.round(10 * DefaultStyle.dp)
// CheckBox {
// id: subscribeToNewsletterCheckBox
// }
// Text {
// text: qsTr("Je souhaite souscrire à la newletter Linphone.")
// font {
// pixelSize: Typography.p1.pixelSize
// weight: Typography.p1.weight
// }
// MouseArea {
// anchors.fill: parent
// onClicked: subscribeToNewsletterCheckBox.toggle()
// }
// }
// }
RowLayout {
spacing: Math.round(10 * DefaultStyle.dp)
CheckBox {
id: termsCheckBox
}
RowLayout {
spacing: 0
Layout.fillWidth: true
Text {
text: qsTr("J'accepte les ")
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
MouseArea {
anchors.fill: parent
onClicked: termsCheckBox.toggle()
}
}
Text {
activeFocusOnTab: true
font {
underline: true
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
bold: activeFocus
}
text: qsTr("conditions dutilisation")
Keys.onPressed: (event)=> {
if (event.key == Qt.Key_Space || event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
cguMouseArea.clicked(undefined)
event.accepted = true;
}
}
MouseArea {
id: cguMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
onClicked: Qt.openUrlExternally(ConstantsCpp.CguUrl)
}
}
Text {
text: qsTr(" et la ")
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
Text {
activeFocusOnTab: true
font {
underline: true
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
bold: activeFocus
}
text: qsTr("politique de confidentialité.")
Keys.onPressed: (event)=> {
if (event.key == Qt.Key_Space || event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
privateMouseArea.clicked(undefined)
event.accepted = true;
}
}
MouseArea {
id: privateMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
onClicked: Qt.openUrlExternally(ConstantsCpp.PrivatePolicyUrl)
}
}
}
}
// }
Button {
enabled: termsCheckBox.checked
style: ButtonStyle.main
text: qsTr("Créer")
onClicked:{
if (usernameInput.text.length === 0) {
console.log("ERROR username")
usernameItem.errorMessage = qsTr("Veuillez entrer un nom d'utilisateur")
} else if (pwdInput.text.length === 0) {
console.log("ERROR password")
passwordItem.errorMessage = qsTr("Veuillez entrer un mot de passe")
} else if (pwdInput.text != confirmPwdInput.text) {
console.log("ERROR confirm pwd")
passwordItem.errorMessage = qsTr("Les mots de passe sont différents")
} else if (bar.currentIndex === 0 && phoneNumberInput.phoneNumber.length === 0) {
console.log("ERROR phone number")
phoneNumberInput.errorMessage = qsTr("Veuillez entrer un numéro de téléphone")
} else if (bar.currentIndex === 1 && emailInput.text.length === 0) {
console.log("ERROR email")
emailItem.errorMessage = qsTr("Veuillez entrer un email")
} else {
console.log("[RegisterPage] User: Call register")
mainItem.browserValidationRequested()
if (bar.currentIndex === 0)
RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, "", phoneNumberInput.completePhoneNumber)
else
RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, emailInput.text, "")
}
}
}
}
}
},
Image {
z: -1
anchors.top: parent.top
anchors.right: parent.right
anchors.topMargin: Math.round(129 * DefaultStyle.dp)
anchors.rightMargin: Math.round(127 * DefaultStyle.dp)
width: Math.round(395 * DefaultStyle.dp)
height: Math.round(350 * DefaultStyle.dp)
fillMode: Image.PreserveAspectFit
source: AppIcons.loginImage
}
]
}