fix ui login pages
This commit is contained in:
parent
7e9714d6c5
commit
b6bddabcce
16 changed files with 578 additions and 596 deletions
3
Linphone/data/image/lock.svg
Normal file
3
Linphone/data/image/lock.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 7.16667V4.5C12 2.29133 10.2087 0.5 8 0.5C5.79133 0.5 4 2.29133 4 4.5V7.16667H2V16.5H14V7.16667H12ZM8.66667 12.3153V13.8333H7.33333V12.3153C6.93667 12.084 6.66667 11.6593 6.66667 11.1667C6.66667 10.4307 7.264 9.83333 8 9.83333C8.736 9.83333 9.33333 10.4307 9.33333 11.1667C9.33333 11.6587 9.064 12.084 8.66667 12.3153ZM5.33333 4.5V7.16667H10.6667V4.5C10.6667 3.02933 9.47 1.83333 8 1.83333C6.52933 1.83333 5.33333 3.02933 5.33333 4.5Z" fill="#4E6074"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 608 B |
|
|
@ -14,27 +14,25 @@ Rectangle {
|
||||||
property alias centerContent : centerLayout.children
|
property alias centerContent : centerLayout.children
|
||||||
color: DefaultStyle.grey_0
|
color: DefaultStyle.grey_0
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
anchors.rightMargin: 40 * DefaultStyle.dp
|
// anchors.leftMargin: 119 * DefaultStyle.dp
|
||||||
anchors.leftMargin: 119 * DefaultStyle.dp
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: bottomMountains.top
|
anchors.bottom: bottomMountains.top
|
||||||
spacing: 3 * DefaultStyle.dp
|
spacing: 0
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 102 * DefaultStyle.dp
|
Layout.preferredHeight: 102 * DefaultStyle.dp
|
||||||
Layout.maximumHeight: 102 * DefaultStyle.dp
|
Layout.rightMargin: 42 * DefaultStyle.dp
|
||||||
// Layout.topMargin: 18
|
spacing: 0
|
||||||
// Layout.alignment: Qt.AlignRight | Qt.AlignTop
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
// Layout.bottomMargin: 20
|
|
||||||
background: Item{}
|
background: Item{}
|
||||||
contentItem: RowLayout {
|
contentItem: RowLayout {
|
||||||
|
spacing: 8 * DefaultStyle.dp
|
||||||
Image {
|
Image {
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
source: AppIcons.info
|
source: AppIcons.info
|
||||||
|
|
@ -58,30 +56,24 @@ Rectangle {
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: titleLayout
|
id: titleLayout
|
||||||
Layout.preferredHeight: 131 * DefaultStyle.dp
|
Layout.preferredHeight: 131 * DefaultStyle.dp
|
||||||
// Layout.bottomMargin: 20
|
Layout.fillWidth: true
|
||||||
}
|
spacing: 0
|
||||||
ColumnLayout {
|
|
||||||
id: centerLayout
|
|
||||||
}
|
}
|
||||||
Item {
|
Item {
|
||||||
|
id: centerLayout
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
Image {
|
||||||
id: bottomMountains
|
id: bottomMountains
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
Image {
|
height: 108 * DefaultStyle.dp
|
||||||
Layout.minimumHeight: 50 * DefaultStyle.dp
|
source: AppIcons.belledonne
|
||||||
Layout.preferredHeight: 80 * DefaultStyle.dp
|
fillMode: Image.Stretch
|
||||||
Layout.fillWidth: true
|
|
||||||
source: AppIcons.belledonne
|
|
||||||
fillMode: Image.Stretch
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ Item {
|
||||||
from: 0
|
from: 0
|
||||||
to: 360
|
to: 360
|
||||||
loops: Animation.Infinite
|
loops: Animation.Infinite
|
||||||
duration: 10000
|
duration: 15000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,13 @@ Control.Button {
|
||||||
id: mainItem
|
id: mainItem
|
||||||
property int capitalization
|
property int capitalization
|
||||||
property color color: DefaultStyle.main1_500_main
|
property color color: DefaultStyle.main1_500_main
|
||||||
|
property color disabledColor: DefaultStyle.main1_500_main_darker
|
||||||
property color borderColor: "transparent"
|
property color borderColor: "transparent"
|
||||||
property color pressedColor: DefaultStyle.main1_500_main_darker
|
property color pressedColor: DefaultStyle.main1_500_main_darker
|
||||||
property bool inversedColors: false
|
property bool inversedColors: false
|
||||||
property int textSize: 18 * DefaultStyle.dp
|
property int textSize: 18 * DefaultStyle.dp
|
||||||
property int textWeight: 600 * DefaultStyle.dp
|
property int textWeight: 600 * DefaultStyle.dp
|
||||||
|
property int radius: 48 * DefaultStyle.dp
|
||||||
property color textColor: DefaultStyle.grey_0
|
property color textColor: DefaultStyle.grey_0
|
||||||
property bool underline: false
|
property bool underline: false
|
||||||
property bool shadowEnabled: false
|
property bool shadowEnabled: false
|
||||||
|
|
@ -35,14 +37,16 @@ Control.Button {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
id: buttonBackground
|
id: buttonBackground
|
||||||
color: inversedColors
|
color: mainItem.enabled
|
||||||
|
? inversedColors
|
||||||
? mainItem.pressed
|
? mainItem.pressed
|
||||||
? DefaultStyle.grey_100
|
? DefaultStyle.grey_100
|
||||||
: DefaultStyle.grey_0
|
: DefaultStyle.grey_0
|
||||||
: mainItem.pressed
|
: mainItem.pressed
|
||||||
? mainItem.pressedColor
|
? mainItem.pressedColor
|
||||||
: mainItem.color
|
: mainItem.color
|
||||||
radius: 48 * DefaultStyle.dp
|
: mainItem.disabledColor
|
||||||
|
radius: mainItem.radius
|
||||||
border.color: inversedColors ? mainItem.color : mainItem.borderColor
|
border.color: inversedColors ? mainItem.color : mainItem.borderColor
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ ColumnLayout {
|
||||||
// which is part of the carouselStackLayout children list
|
// which is part of the carouselStackLayout children list
|
||||||
required property int itemsCount
|
required property int itemsCount
|
||||||
property int currentIndex: carouselStackLayout.currentIndex
|
property int currentIndex: carouselStackLayout.currentIndex
|
||||||
|
property var currentItem: carouselButton.itemAt(currentIndex)
|
||||||
|
spacing: 61 * DefaultStyle.dp
|
||||||
|
|
||||||
function goToSlide(index) {
|
function goToSlide(index) {
|
||||||
carouselStackLayout.goToSlideAtIndex(index)
|
carouselStackLayout.goToSlideAtIndex(index)
|
||||||
|
|
@ -70,30 +72,34 @@ ColumnLayout {
|
||||||
radius: 30 * DefaultStyle.dp
|
radius: 30 * DefaultStyle.dp
|
||||||
color: DefaultStyle.main1_500_main
|
color: DefaultStyle.main1_500_main
|
||||||
z: 1
|
z: 1
|
||||||
x: mainItem.currentIndex >= 0 && carouselButton.itemAt(mainItem.currentIndex) ? carouselButton.itemAt(mainItem.currentIndex).x : 0
|
x: mainItem.currentIndex >= 0 && mainItem.currentItem ? mainItem.currentItem.x - width/2 + mainItem.currentItem.width/2 : 0
|
||||||
Behavior on x { NumberAnimation {duration: 100}}
|
Behavior on x { NumberAnimation {duration: 100}}
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: carouselButtonsLayout
|
id: carouselButtonsLayout
|
||||||
spacing: 10 * DefaultStyle.dp
|
spacing: 7.5 * DefaultStyle.dp
|
||||||
|
anchors.leftMargin: 2.5 * DefaultStyle.dp
|
||||||
Repeater {
|
Repeater {
|
||||||
id: carouselButton
|
id: carouselButton
|
||||||
model: mainItem.itemsCount
|
model: mainItem.itemsCount
|
||||||
delegate: Button {
|
delegate: Button {
|
||||||
width: 8 * DefaultStyle.dp
|
Layout.preferredWidth: 8 * DefaultStyle.dp
|
||||||
height: 8 * DefaultStyle.dp
|
Layout.preferredHeight: 8 * DefaultStyle.dp
|
||||||
padding: 0
|
topPadding: 0
|
||||||
|
bottomPadding: 0
|
||||||
|
leftPadding: 0
|
||||||
|
rightPadding: 0
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
color: DefaultStyle.main2_200
|
color: DefaultStyle.main2_200
|
||||||
radius: 30 * DefaultStyle.dp
|
radius: 30 * DefaultStyle.dp
|
||||||
width: 8 * DefaultStyle.dp
|
anchors.fill: parent
|
||||||
height: 8 * DefaultStyle.dp
|
|
||||||
}
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
mainItem.goToSlide(modelData)
|
mainItem.goToSlide(modelData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Item{Layout.fillWidth: true}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Control.CheckBox {
|
||||||
y: (parent.height - height) / 2
|
y: (parent.height - height) / 2
|
||||||
radius: 3 * DefaultStyle.dp
|
radius: 3 * DefaultStyle.dp
|
||||||
border.color: DefaultStyle.main1_500_main
|
border.color: DefaultStyle.main1_500_main
|
||||||
border.width: 2 * DefaultStyle.dp
|
border.width: 2.2 * DefaultStyle.dp
|
||||||
// color: mainItem.checked ? DefaultStyle.main1_500_main : "transparent"
|
// color: mainItem.checked ? DefaultStyle.main1_500_main : "transparent"
|
||||||
EffectImage {
|
EffectImage {
|
||||||
visible: mainItem.checked
|
visible: mainItem.checked
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ Text {
|
||||||
mainItem.state = "Invisible"
|
mainItem.state = "Invisible"
|
||||||
}
|
}
|
||||||
font {
|
font {
|
||||||
pixelSize: 13 * DefaultStyle.dp
|
pixelSize: 12 * DefaultStyle.dp
|
||||||
weight: 600 * DefaultStyle.dp
|
weight: 300 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
states: [
|
states: [
|
||||||
State{
|
State{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import Linphone
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: mainItem
|
id: mainItem
|
||||||
spacing: 15 * DefaultStyle.dp
|
spacing: 25 * DefaultStyle.dp
|
||||||
signal connectionSucceed()
|
signal connectionSucceed()
|
||||||
|
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
|
|
@ -52,9 +52,8 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorText {
|
ErrorText {
|
||||||
anchors.top: password.bottom
|
|
||||||
anchors.topMargin: 15 * DefaultStyle.dp
|
|
||||||
id: errorText
|
id: errorText
|
||||||
|
anchors.top: password.bottom
|
||||||
Connections {
|
Connections {
|
||||||
target: LoginPageCpp
|
target: LoginPageCpp
|
||||||
onErrorMessageChanged: {
|
onErrorMessageChanged: {
|
||||||
|
|
@ -70,7 +69,8 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: lastFormLineLayout
|
Layout.topMargin: 7 * DefaultStyle.dp
|
||||||
|
spacing: 29 * DefaultStyle.dp
|
||||||
Button {
|
Button {
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
|
@ -108,7 +108,6 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Layout.rightMargin: 20 * DefaultStyle.dp
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
username.errorMessage = ""
|
username.errorMessage = ""
|
||||||
password.errorMessage = ""
|
password.errorMessage = ""
|
||||||
|
|
@ -135,7 +134,7 @@ ColumnLayout {
|
||||||
font{
|
font{
|
||||||
underline: true
|
underline: true
|
||||||
pixelSize: 13 * DefaultStyle.dp
|
pixelSize: 13 * DefaultStyle.dp
|
||||||
weight : 600 * DefaultStyle.dp
|
weight: 600 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onClicked: console.debug("[LoginForm]User: forgotten password button clicked")
|
onClicked: console.debug("[LoginForm]User: forgotten password button clicked")
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ ColumnLayout {
|
||||||
property string errorMessage: ""
|
property string errorMessage: ""
|
||||||
property string placeholderText : ""
|
property string placeholderText : ""
|
||||||
property bool mandatory: false
|
property bool mandatory: false
|
||||||
property int textInputWidth: 200 * DefaultStyle.dp
|
property int textInputWidth: width
|
||||||
property string initialPhoneNumber
|
property string initialPhoneNumber
|
||||||
readonly property string phoneNumber: textField.text
|
readonly property string phoneNumber: textField.text
|
||||||
readonly property string countryCode: combobox.currentText
|
readonly property string countryCode: combobox.currentText
|
||||||
|
|
@ -55,7 +55,7 @@ ColumnLayout {
|
||||||
placeholderText: mainItem.placeholderText
|
placeholderText: mainItem.placeholderText
|
||||||
background: Item{}
|
background: Item{}
|
||||||
initialText: initialPhoneNumber
|
initialText: initialPhoneNumber
|
||||||
validator: IntValidator{}
|
validator: RegularExpressionValidator{ regularExpression: /[0-9]+/}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ ColumnLayout {
|
||||||
property string errorMessage: ""
|
property string errorMessage: ""
|
||||||
property bool enableErrorText: false
|
property bool enableErrorText: false
|
||||||
property bool errorTextVisible: errorText.opacity > 0
|
property bool errorTextVisible: errorText.opacity > 0
|
||||||
|
spacing: 5 * DefaultStyle.dp
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
visible: label.length > 0
|
visible: label.length > 0
|
||||||
|
|
@ -39,6 +40,7 @@ ColumnLayout {
|
||||||
id: errorText
|
id: errorText
|
||||||
visible: mainItem.enableErrorText
|
visible: mainItem.enableErrorText
|
||||||
text: mainItem.errorMessage
|
text: mainItem.errorMessage
|
||||||
|
color: DefaultStyle.main2_600
|
||||||
Layout.preferredWidth: implicitWidth
|
Layout.preferredWidth: implicitWidth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,13 @@ LoginLayout {
|
||||||
signal goToRegister()
|
signal goToRegister()
|
||||||
signal connectionSucceed()
|
signal connectionSucceed()
|
||||||
|
|
||||||
titleContent: RowLayout {
|
titleContent: [
|
||||||
spacing: 15 * DefaultStyle.dp
|
|
||||||
Button {
|
Button {
|
||||||
visible: mainItem.showBackButton
|
enabled: mainItem.showBackButton
|
||||||
|
opacity: mainItem.showBackButton ? 1.0 : 0
|
||||||
Layout.preferredHeight: 27 * DefaultStyle.dp
|
Layout.preferredHeight: 27 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 27 * DefaultStyle.dp
|
Layout.preferredWidth: 27 * DefaultStyle.dp
|
||||||
|
Layout.leftMargin: 79 * DefaultStyle.dp
|
||||||
icon.source: AppIcons.leftArrow
|
icon.source: AppIcons.leftArrow
|
||||||
icon.width: 27 * DefaultStyle.dp
|
icon.width: 27 * DefaultStyle.dp
|
||||||
icon.height: 27 * DefaultStyle.dp
|
icon.height: 27 * DefaultStyle.dp
|
||||||
|
|
@ -27,72 +28,78 @@ LoginLayout {
|
||||||
console.debug("[LoginLayout] User: return")
|
console.debug("[LoginLayout] User: return")
|
||||||
mainItem.goBack()
|
mainItem.goBack()
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
Image {
|
RowLayout {
|
||||||
fillMode: Image.PreserveAspectFit
|
spacing: 15 * DefaultStyle.dp
|
||||||
source: AppIcons.profile
|
Layout.leftMargin: 21 * DefaultStyle.dp
|
||||||
Layout.preferredHeight: 34 * DefaultStyle.dp
|
Image {
|
||||||
Layout.preferredWidth: 34 * DefaultStyle.dp
|
fillMode: Image.PreserveAspectFit
|
||||||
}
|
source: AppIcons.profile
|
||||||
Text {
|
Layout.preferredHeight: 34 * DefaultStyle.dp
|
||||||
text: qsTr("Connexion")
|
Layout.preferredWidth: 34 * DefaultStyle.dp
|
||||||
font {
|
|
||||||
pixelSize: 36 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
}
|
||||||
}
|
Text {
|
||||||
|
text: qsTr("Connexion")
|
||||||
|
font {
|
||||||
|
pixelSize: 36 * DefaultStyle.dp
|
||||||
|
weight: 800 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
},
|
||||||
Text {
|
|
||||||
Layout.rightMargin: 15 * DefaultStyle.dp
|
|
||||||
text: qsTr("Pas encore de compte ?")
|
|
||||||
font.pixelSize: 14 * DefaultStyle.dp
|
|
||||||
font.weight: 400 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
|
||||||
topPadding: 11 * DefaultStyle.dp
|
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
|
||||||
text: qsTr("S'inscrire")
|
|
||||||
onClicked: {
|
|
||||||
console.debug("[LoginPage] User: go to register")
|
|
||||||
mainItem.goToRegister()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
centerContent: ColumnLayout {
|
|
||||||
Layout.leftMargin: 45 * DefaultStyle.dp
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
spacing: 20 * DefaultStyle.dp
|
||||||
ColumnLayout {
|
Layout.rightMargin: 51 * DefaultStyle.dp
|
||||||
LoginForm {
|
Text {
|
||||||
onConnectionSucceed: mainItem.connectionSucceed()
|
Layout.rightMargin: 15 * DefaultStyle.dp
|
||||||
}
|
text: qsTr("Pas encore de compte ?")
|
||||||
Button {
|
font.pixelSize: 14 * DefaultStyle.dp
|
||||||
Layout.topMargin: 40 * DefaultStyle.dp
|
font.weight: 400 * DefaultStyle.dp
|
||||||
inversedColors: true
|
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
|
||||||
topPadding: 11 * DefaultStyle.dp
|
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
|
||||||
text: qsTr("Compte SIP tiers")
|
|
||||||
onClicked: {mainItem.useSIPButtonClicked()}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Item {
|
Button {
|
||||||
Layout.fillWidth: true
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
Image {
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
Layout.alignment: Qt.AlignVCenter
|
topPadding: 11 * DefaultStyle.dp
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 395 * DefaultStyle.dp
|
text: qsTr("S'inscrire")
|
||||||
fillMode: Image.PreserveAspectFit
|
onClicked: {
|
||||||
source: AppIcons.loginImage
|
console.debug("[LoginPage] User: go to register")
|
||||||
|
mainItem.goToRegister()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
centerContent: [
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.leftMargin: 127 * DefaultStyle.dp
|
||||||
|
anchors.topMargin: 70 * DefaultStyle.dp
|
||||||
|
spacing: 39 * DefaultStyle.dp
|
||||||
|
LoginForm {
|
||||||
|
onConnectionSucceed: mainItem.connectionSucceed()
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
inversedColors: true
|
||||||
|
Layout.preferredWidth: 235 * DefaultStyle.dp
|
||||||
|
Layout.preferredHeight: 47 * DefaultStyle.dp
|
||||||
|
text: qsTr("Compte SIP tiers")
|
||||||
|
onClicked: {mainItem.useSIPButtonClicked()}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Image {
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.topMargin: 129 * DefaultStyle.dp
|
||||||
|
anchors.rightMargin: 127 * DefaultStyle.dp
|
||||||
|
width: 395 * DefaultStyle.dp
|
||||||
|
height: 350 * DefaultStyle.dp
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
source: AppIcons.loginImage
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,126 +9,119 @@ LoginLayout {
|
||||||
property string phoneNumber
|
property string phoneNumber
|
||||||
property string email
|
property string email
|
||||||
|
|
||||||
titleContent: RowLayout {
|
titleContent: [
|
||||||
Button {
|
|
||||||
Layout.preferredHeight: 24 * DefaultStyle.dp
|
|
||||||
Layout.preferredWidth: 24 * DefaultStyle.dp
|
|
||||||
icon.source: AppIcons.leftArrow
|
|
||||||
icon.width: 24 * DefaultStyle.dp
|
|
||||||
icon.height: 24 * DefaultStyle.dp
|
|
||||||
background: Rectangle {
|
|
||||||
color: "transparent"
|
|
||||||
}
|
|
||||||
onClicked: {
|
|
||||||
console.debug("[RegisterCheckingPage] User: return to register")
|
|
||||||
mainItem.returnToRegister()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Image {
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: AppIcons.profile
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
wrapMode: Text.NoWrap
|
|
||||||
text: {
|
|
||||||
var completeString = (mainItem.email.length > 0) ? qsTr("email") : qsTr("numéro")
|
|
||||||
text = qsTr("Inscription | Confirmer votre ") + completeString
|
|
||||||
}
|
|
||||||
font {
|
|
||||||
pixelSize: 36 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
scaleLettersFactor: 1.1
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
centerContent: ColumnLayout {
|
|
||||||
spacing: 2 * DefaultStyle.dp
|
|
||||||
Text {
|
|
||||||
Layout.alignment: Qt.AlignTop
|
|
||||||
font.bold: true
|
|
||||||
font {
|
|
||||||
pixelSize: 22 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
color: DefaultStyle.main2_700
|
|
||||||
text: {
|
|
||||||
var completeString = (mainItem.email.length > 0) ? ("email " + mainItem.email) : ("phone number " + mainItem.phoneNumber)
|
|
||||||
text = "We have sent a verification code on your " + completeString + " <br>Please enter the verification code below:"
|
|
||||||
}
|
|
||||||
font {
|
|
||||||
pixelSize: 22 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.fillWidth: true
|
spacing: 21 * DefaultStyle.dp
|
||||||
Layout.margins: 10 * DefaultStyle.dp
|
Layout.leftMargin: 119 * DefaultStyle.dp
|
||||||
ColumnLayout {
|
Button {
|
||||||
spacing: 70 * DefaultStyle.dp
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
RowLayout {
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
Repeater {
|
icon.source: AppIcons.leftArrow
|
||||||
model: 4
|
icon.width: 24 * DefaultStyle.dp
|
||||||
DigitInput {
|
icon.height: 24 * DefaultStyle.dp
|
||||||
required property int index
|
background: Rectangle {
|
||||||
Layout.preferredWidth: width
|
color: "transparent"
|
||||||
Layout.preferredHeight: height
|
|
||||||
onTextEdited: {
|
|
||||||
console.log("textfield text", text, index)
|
|
||||||
if (text.length > 0 ) {
|
|
||||||
if (index < 3)
|
|
||||||
nextItemInFocusChain(true).forceActiveFocus()
|
|
||||||
else {
|
|
||||||
// validate()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (index > 0)
|
|
||||||
nextItemInFocusChain(false).forceActiveFocus()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Layout.margins: 10 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RowLayout {
|
onClicked: {
|
||||||
Layout.alignment: Qt.AlignBottom
|
console.debug("[RegisterCheckingPage] User: return to register")
|
||||||
Text {
|
mainItem.returnToRegister()
|
||||||
Layout.rightMargin: 15 * DefaultStyle.dp
|
|
||||||
text: "Didn't receive the code ?"
|
|
||||||
color: DefaultStyle.main2_700
|
|
||||||
font.pixelSize: 14 * DefaultStyle.dp
|
|
||||||
font.weight: 400 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
|
||||||
topPadding: 11 * DefaultStyle.dp
|
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
|
||||||
inversedColors: true
|
|
||||||
text: "Resend a code"
|
|
||||||
onClicked: {
|
|
||||||
console.debug("[RegisterCheckingPage] User: Resend code")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
Image {
|
Image {
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
|
||||||
Layout.preferredWidth: 300 * DefaultStyle.dp
|
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
source: AppIcons.verif_page_image
|
source: AppIcons.profile
|
||||||
}
|
}
|
||||||
}
|
Text {
|
||||||
|
wrapMode: Text.NoWrap
|
||||||
|
text: {
|
||||||
|
var completeString = (mainItem.email.length > 0) ? qsTr("email") : qsTr("numéro")
|
||||||
|
text = qsTr("Inscription | Confirmer votre ") + completeString
|
||||||
|
}
|
||||||
|
font {
|
||||||
|
pixelSize: 36 * DefaultStyle.dp
|
||||||
|
weight: 800 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
scaleLettersFactor: 1.1
|
||||||
|
}
|
||||||
|
},
|
||||||
Item {
|
Item {
|
||||||
Layout.fillHeight: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
|
||||||
|
centerContent: [
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: 51 * DefaultStyle.dp
|
||||||
|
anchors.leftMargin: 127 * DefaultStyle.dp
|
||||||
|
spacing: 104 * DefaultStyle.dp
|
||||||
|
Text {
|
||||||
|
font {
|
||||||
|
bold: true
|
||||||
|
pixelSize: 22 * DefaultStyle.dp
|
||||||
|
weight: 800 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
color: DefaultStyle.main2_700
|
||||||
|
text: {
|
||||||
|
var completeString = (mainItem.email.length > 0) ? ("email \"" + mainItem.email + "\"") : ("phone number \"" + mainItem.phoneNumber + "\"")
|
||||||
|
text = "We have sent a verification code on your " + completeString + " <br>Please enter the verification code below:"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RowLayout {
|
||||||
|
spacing: 45 * DefaultStyle.dp
|
||||||
|
Repeater {
|
||||||
|
model: 4
|
||||||
|
DigitInput {
|
||||||
|
required property int index
|
||||||
|
Layout.preferredWidth: width
|
||||||
|
Layout.preferredHeight: height
|
||||||
|
onTextEdited: {
|
||||||
|
if (text.length > 0 ) {
|
||||||
|
if (index < 3)
|
||||||
|
nextItemInFocusChain(true).forceActiveFocus()
|
||||||
|
else {
|
||||||
|
// TODO : validate()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (index > 0)
|
||||||
|
nextItemInFocusChain(false).forceActiveFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RowLayout {
|
||||||
|
spacing: 20 * DefaultStyle.dp
|
||||||
|
Text {
|
||||||
|
text: "Didn't receive the code ?"
|
||||||
|
color: DefaultStyle.main2_700
|
||||||
|
font.pixelSize: 14 * DefaultStyle.dp
|
||||||
|
font.weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
inversedColors: true
|
||||||
|
text: "Resend a code"
|
||||||
|
onClicked: {
|
||||||
|
console.debug("[RegisterCheckingPage] User: Resend code")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Image {
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.topMargin: 140 * DefaultStyle.dp
|
||||||
|
anchors.rightMargin: 97.03 * DefaultStyle.dp
|
||||||
|
width: 476.78 * DefaultStyle.dp
|
||||||
|
height: 345.13 * DefaultStyle.dp
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
source: AppIcons.verif_page_image
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,221 +11,122 @@ LoginLayout {
|
||||||
readonly property string phoneNumber: phoneNumberInput.phoneNumber
|
readonly property string phoneNumber: phoneNumberInput.phoneNumber
|
||||||
readonly property string email: emailInput.text
|
readonly property string email: emailInput.text
|
||||||
|
|
||||||
titleContent: RowLayout {
|
titleContent: [
|
||||||
Image {
|
RowLayout {
|
||||||
fillMode: Image.PreserveAspectFit
|
spacing: 21 * DefaultStyle.dp
|
||||||
source: AppIcons.profile
|
Layout.leftMargin: 119 * DefaultStyle.dp
|
||||||
}
|
Image {
|
||||||
Text {
|
fillMode: Image.PreserveAspectFit
|
||||||
Layout.preferredWidth: width
|
source: AppIcons.profile
|
||||||
text: qsTr("Inscription")
|
|
||||||
font {
|
|
||||||
pixelSize: 36 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
}
|
||||||
wrapMode: Text.NoWrap
|
Text {
|
||||||
scaleLettersFactor: 1.1
|
Layout.preferredWidth: width
|
||||||
}
|
text: qsTr("Inscription")
|
||||||
|
font {
|
||||||
|
pixelSize: 36 * DefaultStyle.dp
|
||||||
|
weight: 800 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
wrapMode: Text.NoWrap
|
||||||
|
scaleLettersFactor: 1.1
|
||||||
|
}
|
||||||
|
},
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
},
|
||||||
Text {
|
RowLayout {
|
||||||
Layout.rightMargin: 15 * DefaultStyle.dp
|
spacing: 20 * DefaultStyle.dp
|
||||||
color: DefaultStyle.main2_700
|
Layout.rightMargin: 51 * DefaultStyle.dp
|
||||||
text: qsTr("Déjà un compte ?")
|
Text {
|
||||||
font {
|
Layout.rightMargin: 15 * DefaultStyle.dp
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
color: DefaultStyle.main2_700
|
||||||
weight: 400 * DefaultStyle.dp
|
text: qsTr("Déjà un compte ?")
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
text: qsTr("Connexion")
|
||||||
|
onClicked: {
|
||||||
|
console.debug("[RegisterPage] User: return")
|
||||||
|
returnToLogin()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Button {
|
]
|
||||||
// Layout.alignment: Qt.AlignRight
|
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
centerContent: [
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
ColumnLayout {
|
||||||
topPadding: 11 * DefaultStyle.dp
|
anchors.top: parent.top
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
anchors.left: parent.left
|
||||||
text: qsTr("Connexion")
|
anchors.right: parent.right
|
||||||
onClicked: {
|
anchors.topMargin: 51 * DefaultStyle.dp
|
||||||
console.debug("[RegisterPage] User: return")
|
anchors.leftMargin: 127 * DefaultStyle.dp
|
||||||
returnToLogin()
|
anchors.rightMargin: 127 * DefaultStyle.dp
|
||||||
|
spacing: 50 * DefaultStyle.dp
|
||||||
|
TabBar {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
id: bar
|
||||||
|
model: [qsTr("Register with phone number"), qsTr("Register with email")]
|
||||||
}
|
}
|
||||||
}
|
ColumnLayout {
|
||||||
}
|
spacing: 22 * DefaultStyle.dp
|
||||||
|
|
||||||
centerContent: ColumnLayout {
|
|
||||||
Layout.topMargin: 40 * DefaultStyle.dp
|
|
||||||
TabBar {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
id: bar
|
|
||||||
model: [qsTr("Register with phone number"), qsTr("Register with email")]
|
|
||||||
}
|
|
||||||
StackLayout {
|
|
||||||
currentIndex: bar.currentIndex
|
|
||||||
Layout.topMargin: 50 * DefaultStyle.dp
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
Layout.fillWidth: true
|
spacing: 24 * DefaultStyle.dp
|
||||||
Layout.fillHeight: true
|
|
||||||
spacing: 15 * DefaultStyle.dp
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
spacing: 16 * DefaultStyle.dp
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
label: qsTr("Username")
|
label: qsTr("Username")
|
||||||
mandatory: true
|
mandatory: true
|
||||||
contentItem: TextField {
|
contentItem: TextField {
|
||||||
|
id: usernameInput
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
Layout.preferredWidth: 346 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ComboBox {
|
|
||||||
Layout.alignment: Qt.AlignBottom
|
|
||||||
enabled: false
|
|
||||||
model: [{text:"@sip.linphone.org"}]
|
|
||||||
Layout.preferredWidth: 210 * DefaultStyle.dp
|
|
||||||
Layout.preferredHeight: 49 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PhoneNumberInput {
|
|
||||||
id: phoneNumberInput
|
|
||||||
label: qsTr("Phone number")
|
|
||||||
mandatory: true
|
|
||||||
placeholderText: "Phone number"
|
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
RowLayout {
|
|
||||||
ColumnLayout {
|
|
||||||
FormItemLayout {
|
|
||||||
label: qsTr("Password")
|
|
||||||
mandatory: true
|
|
||||||
contentItem: TextField {
|
|
||||||
hidden: true
|
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: qsTr("The password must contain 6 characters minimum")
|
|
||||||
font {
|
|
||||||
pixelSize: 12 * DefaultStyle.dp
|
|
||||||
weight: 300 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ColumnLayout {
|
|
||||||
FormItemLayout {
|
|
||||||
label: qsTr("Confirm password")
|
|
||||||
mandatory: true
|
|
||||||
contentItem: TextField {
|
|
||||||
hidden: true
|
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: qsTr("The password must contain 6 characters minimum")
|
|
||||||
font {
|
|
||||||
pixelSize: 12 * DefaultStyle.dp
|
|
||||||
weight: 300 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout {
|
|
||||||
CheckBox {
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: qsTr("I would like to suscribe to the newsletter")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout {
|
|
||||||
CheckBox {
|
|
||||||
}
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 0
|
spacing: 10 * DefaultStyle.dp
|
||||||
Layout.fillWidth: true
|
Layout.alignment: Qt.AlignBottom
|
||||||
Text {
|
ComboBox {
|
||||||
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
enabled: false
|
||||||
text: qsTr("I accept the Terms and Conditions: ")
|
model: [{text:"@sip.linphone.org"}]
|
||||||
|
Layout.preferredWidth: 210 * DefaultStyle.dp
|
||||||
|
Layout.preferredHeight: 49 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
Text {
|
EffectImage {
|
||||||
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
imageSource: AppIcons.lock
|
||||||
font.underline: true
|
colorizationColor: DefaultStyle.main2_600
|
||||||
text: qsTr("Read the Terms and Conditions.")
|
Layout.preferredWidth: 16 * DefaultStyle.dp
|
||||||
MouseArea {
|
Layout.preferredHeight: 16 * DefaultStyle.dp
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
||||||
onClicked: console.log("TODO : display terms and conditions")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
|
||||||
text: qsTr("I accept the Privacy policy: ")
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
|
||||||
font.underline: true
|
|
||||||
text: qsTr("Read the Privacy policy.")
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
||||||
onClicked: console.log("TODO : display privacy policy")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Button {
|
StackLayout {
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
currentIndex: bar.currentIndex
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
Layout.fillWidth: true
|
||||||
topPadding: 11 * DefaultStyle.dp
|
PhoneNumberInput {
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
id: phoneNumberInput
|
||||||
text: qsTr("Register")
|
label: qsTr("Phone number")
|
||||||
onClicked:{
|
mandatory: true
|
||||||
console.log("[RegisterPage] User: Call register with phone number", phoneNumberInput.phoneNumber)
|
placeholderText: "Phone number"
|
||||||
mainItem.registerCalled(phoneNumberInput.countryCode, phoneNumberInput.phoneNumber, "")
|
Layout.preferredWidth: 346 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
Image {
|
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
|
||||||
Layout.preferredWidth: 395 * DefaultStyle.dp
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: AppIcons.loginImage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RowLayout {
|
|
||||||
ColumnLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
spacing: 15 * DefaultStyle.dp
|
|
||||||
RowLayout {
|
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
label: qsTr("Username")
|
label: qsTr("Email")
|
||||||
mandatory: true
|
mandatory: true
|
||||||
contentItem: TextField {
|
contentItem: TextField {
|
||||||
|
id: emailInput
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
Layout.preferredWidth: 346 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ComboBox {
|
|
||||||
// if we don't set a label this item is offset
|
|
||||||
// due to the invisibility of the upper label
|
|
||||||
enabled: false
|
|
||||||
model: [{text:"@sip.linphone.org"}]
|
|
||||||
Layout.preferredWidth: 210 * DefaultStyle.dp
|
|
||||||
Layout.alignment: Qt.AlignBottom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FormItemLayout {
|
|
||||||
label: qsTr("Email")
|
|
||||||
mandatory: true
|
|
||||||
contentItem: TextField {
|
|
||||||
id: emailInput
|
|
||||||
Layout.preferredWidth: 346 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
spacing: 16 * DefaultStyle.dp
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
spacing: 5 * DefaultStyle.dp
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
label: qsTr("Password")
|
label: qsTr("Password")
|
||||||
mandatory: true
|
mandatory: true
|
||||||
|
|
@ -244,6 +145,7 @@ LoginLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
spacing: 5 * DefaultStyle.dp
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
label: qsTr("Confirm password")
|
label: qsTr("Confirm password")
|
||||||
mandatory: true
|
mandatory: true
|
||||||
|
|
@ -262,48 +164,101 @@ LoginLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
ColumnLayout {
|
||||||
|
spacing: 18 * DefaultStyle.dp
|
||||||
RowLayout {
|
RowLayout {
|
||||||
CheckBox {
|
CheckBox {
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
text: qsTr("I would like to suscribe to the newsletter")
|
text: qsTr("I would like to suscribe to the newsletter")
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
CheckBox {
|
CheckBox {
|
||||||
|
id: termsCheckBox
|
||||||
}
|
}
|
||||||
Text {
|
RowLayout {
|
||||||
Layout.preferredWidth: 450 * DefaultStyle.dp
|
spacing: 0
|
||||||
text: qsTr("I accept the Terms and Conditions : Read the Terms and Conditions. <br>I accept the Privacy policy : Read the Privacy policy.")
|
Layout.fillWidth: true
|
||||||
}
|
Text {
|
||||||
}
|
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
||||||
Button {
|
text: qsTr("I accept the Terms and Conditions: ")
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
font {
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
topPadding: 11 * DefaultStyle.dp
|
weight: 400 * DefaultStyle.dp
|
||||||
bottomPadding: 11 * DefaultStyle.dp
|
}
|
||||||
text: qsTr("Register")
|
}
|
||||||
onClicked:{
|
Text {
|
||||||
console.log("[RegisterPage] User: Call register with email", emailInput.text)
|
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
||||||
if (emailInput.text.length == 0) {
|
font {
|
||||||
emailInput.errorMessage = qsTr("You must enter an email")
|
underline: true
|
||||||
return
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
text: qsTr("Read the Terms and Conditions.")
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
onClicked: console.log("TODO : display terms and conditions")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
||||||
|
text: qsTr("I accept the Privacy policy: ")
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
// Layout.preferredWidth: 450 * DefaultStyle.dp
|
||||||
|
font {
|
||||||
|
underline: true
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
text: qsTr("Read the Privacy policy.")
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
onClicked: console.log("TODO : display privacy policy")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mainItem.registerCalled("", "", emailInput.text)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item {
|
Button {
|
||||||
Layout.fillWidth: true
|
// enabled: termsCheckBox.checked && usernameInput.text.length != 0 && pwdInput.text.length != 0 && confirmPwdInput.text.length != 0
|
||||||
}
|
// && (phoneNumberInput.phoneNumber.length != 0 || emailInput.text.length != 0)
|
||||||
Image {
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 395 * DefaultStyle.dp
|
topPadding: 11 * DefaultStyle.dp
|
||||||
fillMode: Image.PreserveAspectFit
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
source: AppIcons.loginImage
|
text: qsTr("Register")
|
||||||
|
onClicked:{
|
||||||
|
console.log("[RegisterPage] User: Call register with phone number", phoneNumberInput.phoneNumber)
|
||||||
|
mainItem.registerCalled(phoneNumberInput.countryCode, phoneNumberInput.phoneNumber, emailInput.text)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
Image {
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.topMargin: 129 * DefaultStyle.dp
|
||||||
|
anchors.rightMargin: 127 * DefaultStyle.dp
|
||||||
|
width: 395 * DefaultStyle.dp
|
||||||
|
height: 350 * DefaultStyle.dp
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
source: AppIcons.loginImage
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,129 +10,137 @@ LoginLayout {
|
||||||
signal goToRegister()
|
signal goToRegister()
|
||||||
signal connectionSucceed()
|
signal connectionSucceed()
|
||||||
|
|
||||||
titleContent: RowLayout {
|
titleContent: [
|
||||||
Button {
|
RowLayout {
|
||||||
Layout.preferredHeight: 24 * DefaultStyle.dp
|
Layout.leftMargin: 119 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 24 * DefaultStyle.dp
|
spacing: 21 * DefaultStyle.dp
|
||||||
icon.source: AppIcons.leftArrow
|
Button {
|
||||||
icon.width: 24 * DefaultStyle.dp
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
icon.height: 24 * DefaultStyle.dp
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
background: Item {
|
icon.source: AppIcons.leftArrow
|
||||||
anchors.fill: parent
|
icon.width: 24 * DefaultStyle.dp
|
||||||
|
icon.height: 24 * DefaultStyle.dp
|
||||||
|
background: Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
console.debug("[SIPLoginPage] User: return")
|
||||||
|
mainItem.goBack()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
onClicked: {
|
Image {
|
||||||
console.debug("[SIPLoginPage] User: return")
|
fillMode: Image.PreserveAspectFit
|
||||||
mainItem.goBack()
|
source: AppIcons.profile
|
||||||
|
Layout.preferredHeight: 34 * DefaultStyle.dp
|
||||||
|
Layout.preferredWidth: 34 * DefaultStyle.dp
|
||||||
|
sourceSize.width: 34 * DefaultStyle.dp
|
||||||
|
sourceSize.height: 34 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
Text {
|
||||||
Image {
|
text: qsTr("Compte SIP tiers")
|
||||||
fillMode: Image.PreserveAspectFit
|
font {
|
||||||
source: AppIcons.profile
|
pixelSize: 36 * DefaultStyle.dp
|
||||||
Layout.preferredHeight: 34 * DefaultStyle.dp
|
weight: 800 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 34 * DefaultStyle.dp
|
}
|
||||||
sourceSize.width: 34 * DefaultStyle.dp
|
scaleLettersFactor: 1.1
|
||||||
sourceSize.height: 34 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: qsTr("Compte SIP tiers")
|
|
||||||
font {
|
|
||||||
pixelSize: 36 * DefaultStyle.dp
|
|
||||||
weight: 800 * DefaultStyle.dp
|
|
||||||
}
|
}
|
||||||
scaleLettersFactor: 1.1
|
},
|
||||||
}
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
},
|
||||||
Text {
|
RowLayout {
|
||||||
Layout.rightMargin: 15 * DefaultStyle.dp
|
Layout.rightMargin: 51 * DefaultStyle.dp
|
||||||
text: qsTr("Pas encore de compte ?")
|
spacing: 20 * DefaultStyle.dp
|
||||||
font {
|
Text {
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
Layout.rightMargin: 15 * DefaultStyle.dp
|
||||||
weight: 400 * DefaultStyle.dp
|
text: qsTr("Pas encore de compte ?")
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
text: qsTr("S'inscrire")
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
onClicked: {
|
||||||
|
console.debug("[SIPLoginPage] User: go to register page")
|
||||||
|
mainItem.goToRegister()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Button {
|
]
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
text: qsTr("S'inscrire")
|
Component {
|
||||||
onClicked: {
|
id: firstItem
|
||||||
console.debug("[SIPLoginPage] User: go to register page")
|
ColumnLayout {
|
||||||
mainItem.goToRegister()
|
spacing: 0
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredWidth: rootStackView.width
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
color: DefaultStyle.main2_600
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400* DefaultStyle.dp
|
||||||
|
}
|
||||||
|
text: "<p>Some features require a Linphone account, such as group messaging, video conferences...</p>
|
||||||
|
<p>These features are hidden when you register with a third party SIP account.</p>
|
||||||
|
<p>To enable it in a commercial projet, please contact us. </p>"
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
Layout.topMargin: 18 * DefaultStyle.dp
|
||||||
|
text: "linphone.org/contact"
|
||||||
|
textSize: 13 * DefaultStyle.dp
|
||||||
|
inversedColors: true
|
||||||
|
leftPadding: 12 * DefaultStyle.dp
|
||||||
|
rightPadding: 12 * DefaultStyle.dp
|
||||||
|
topPadding: 6 * DefaultStyle.dp
|
||||||
|
bottomPadding: 6 * DefaultStyle.dp
|
||||||
|
onClicked: {
|
||||||
|
Qt.openUrlExternally(ConstantsCpp.ContactUrl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
Layout.topMargin: 85 * DefaultStyle.dp
|
||||||
|
Layout.preferredWidth: 360 * DefaultStyle.dp
|
||||||
|
inversedColors: true
|
||||||
|
text: qsTr("I prefer creating an account")
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
onClicked: {
|
||||||
|
console.debug("[SIPLoginPage] User: click register")
|
||||||
|
mainItem.goToRegister()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
Layout.topMargin: 20 * DefaultStyle.dp
|
||||||
|
Layout.preferredWidth: 360 * DefaultStyle.dp
|
||||||
|
text: qsTr("I understand")
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
onClicked: {
|
||||||
|
rootStackView.replace(secondItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Component {
|
||||||
centerContent: RowLayout {
|
id: secondItem
|
||||||
signal useSIPButtonClicked()
|
ColumnLayout {
|
||||||
Layout.topMargin: 85 * DefaultStyle.dp
|
spacing: 0
|
||||||
Control.StackView {
|
|
||||||
id: rootStackView
|
|
||||||
initialItem: firstItem
|
|
||||||
Layout.preferredWidth: 361 * DefaultStyle.dp
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
clip: true
|
|
||||||
}
|
|
||||||
Component {
|
|
||||||
id: firstItem
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
Layout.alignment: Qt.AlignVCenter
|
spacing: 16 * DefaultStyle.dp
|
||||||
spacing: 10 * DefaultStyle.dp
|
|
||||||
// Layout.bottomMargin: 20 * DefaultStyle.dp
|
|
||||||
Text {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.preferredWidth: rootStackView.width
|
|
||||||
width: rootStackView.width
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
color: DefaultStyle.main2_600
|
|
||||||
font {
|
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
|
||||||
weight: 400* DefaultStyle.dp
|
|
||||||
}
|
|
||||||
text: "<p>Some features require a Linphone account, such as group messaging, video conferences...</p>
|
|
||||||
<p>These features are hidden when you register with a third party SIP account.</p>
|
|
||||||
<p>To enable it in a commercial projet, please contact us. </p>"
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
text: "linphone.org/contact"
|
|
||||||
textSize: 13 * DefaultStyle.dp
|
|
||||||
inversedColors: true
|
|
||||||
leftPadding: 12 * DefaultStyle.dp
|
|
||||||
rightPadding: 12 * DefaultStyle.dp
|
|
||||||
topPadding: 6 * DefaultStyle.dp
|
|
||||||
bottomPadding: 6 * DefaultStyle.dp
|
|
||||||
onClicked: {
|
|
||||||
Qt.openUrlExternally(ConstantsCpp.ContactUrl)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.preferredHeight: 85 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
inversedColors: true
|
|
||||||
text: qsTr("I prefer creating an account")
|
|
||||||
onClicked: {
|
|
||||||
console.debug("[SIPLoginPage] User: click register")
|
|
||||||
mainItem.goToRegister()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
text: qsTr("I understand")
|
|
||||||
onClicked: {
|
|
||||||
rootStackView.replace(secondItem)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Component {
|
|
||||||
id: secondItem
|
|
||||||
ColumnLayout {
|
|
||||||
spacing: 10 * DefaultStyle.dp
|
|
||||||
FormItemLayout {
|
FormItemLayout {
|
||||||
label: qsTr("Username")
|
label: qsTr("Username")
|
||||||
mandatory: true
|
mandatory: true
|
||||||
|
|
@ -173,49 +181,62 @@ LoginLayout {
|
||||||
model:[ "TCP", "UDP", "TLS", "DTLS"]
|
model:[ "TCP", "UDP", "TLS", "DTLS"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ErrorText {
|
ErrorText {
|
||||||
id: errorText
|
id: errorText
|
||||||
Connections {
|
Connections {
|
||||||
target: LoginPageCpp
|
target: LoginPageCpp
|
||||||
onRegistrationStateChanged: {
|
onRegistrationStateChanged: {
|
||||||
if (LoginPageCpp.registrationState === LinphoneEnums.RegistrationState.Failed) {
|
if (LoginPageCpp.registrationState === LinphoneEnums.RegistrationState.Failed) {
|
||||||
errorText.text = qsTr("Connection has failed. Please verify your credentials")
|
errorText.text = qsTr("Connection has failed. Please verify your credentials")
|
||||||
} else if (LoginPageCpp.registrationState === LinphoneEnums.RegistrationState.Ok) {
|
} else if (LoginPageCpp.registrationState === LinphoneEnums.RegistrationState.Ok) {
|
||||||
mainItem.connectionSucceed()
|
mainItem.connectionSucceed()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
Layout.topMargin: 20 * DefaultStyle.dp
|
Layout.topMargin: 32 * DefaultStyle.dp
|
||||||
Layout.bottomMargin: 20 * DefaultStyle.dp
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
text: qsTr("Log in")
|
topPadding: 11 * DefaultStyle.dp
|
||||||
onClicked: {
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
console.debug("[SIPLoginPage] User: Log in")
|
text: qsTr("Log in")
|
||||||
LoginPageCpp.login(username.inputText, password.inputText);
|
onClicked: {
|
||||||
}
|
console.debug("[SIPLoginPage] User: Log in")
|
||||||
}
|
LoginPageCpp.login(username.inputText, password.inputText);
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Item {
|
||||||
}
|
Layout.fillHeight: true
|
||||||
Item {
|
}
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
centerContent: [
|
||||||
|
Control.StackView {
|
||||||
|
id: rootStackView
|
||||||
|
initialItem: firstItem
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.topMargin: 70 * DefaultStyle.dp
|
||||||
|
anchors.leftMargin: 127 * DefaultStyle.dp
|
||||||
|
width: 361 * DefaultStyle.dp
|
||||||
|
clip: true
|
||||||
|
},
|
||||||
Image {
|
Image {
|
||||||
Layout.alignment: Qt.AlignVCenter
|
anchors.top: parent.top
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
anchors.right: parent.right
|
||||||
Layout.preferredWidth: 395 * DefaultStyle.dp
|
anchors.topMargin: 129 * DefaultStyle.dp
|
||||||
|
anchors.rightMargin: 127 * DefaultStyle.dp
|
||||||
|
width: 395 * DefaultStyle.dp
|
||||||
|
height: 350 * DefaultStyle.dp
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
source: AppIcons.loginImage
|
source: AppIcons.loginImage
|
||||||
}
|
}
|
||||||
Item {
|
]
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,21 +8,23 @@ LoginLayout {
|
||||||
id: mainItem
|
id: mainItem
|
||||||
signal startButtonPressed()
|
signal startButtonPressed()
|
||||||
|
|
||||||
titleContent: RowLayout {
|
titleContent: [
|
||||||
Text {
|
Text {
|
||||||
id: welcome
|
id: welcome
|
||||||
text: qsTr("Bienvenue")
|
text: qsTr("Bienvenue")
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
Layout.leftMargin: 132 * DefaultStyle.dp
|
||||||
color: DefaultStyle.main2_800
|
color: DefaultStyle.main2_800
|
||||||
font {
|
font {
|
||||||
pixelSize: 96 * DefaultStyle.dp
|
pixelSize: 96 * DefaultStyle.dp
|
||||||
weight: 800 * DefaultStyle.dp
|
weight: 800 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
scaleLettersFactor: 1.1
|
scaleLettersFactor: 1.1
|
||||||
}
|
},
|
||||||
Text {
|
Text {
|
||||||
Layout.alignment: Qt.AlignBottom
|
Layout.alignment: Qt.AlignBottom
|
||||||
Layout.leftMargin: 10 * DefaultStyle.dp
|
Layout.leftMargin: 29 * DefaultStyle.dp
|
||||||
Layout.bottomMargin: 5 * DefaultStyle.dp
|
Layout.bottomMargin: 19 * DefaultStyle.dp
|
||||||
color: DefaultStyle.main2_800
|
color: DefaultStyle.main2_800
|
||||||
text: qsTr("sur Linphone")
|
text: qsTr("sur Linphone")
|
||||||
font {
|
font {
|
||||||
|
|
@ -30,13 +32,15 @@ LoginLayout {
|
||||||
weight: 800 * DefaultStyle.dp
|
weight: 800 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
scaleLettersFactor: 1.1
|
scaleLettersFactor: 1.1
|
||||||
}
|
},
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
},
|
||||||
Button {
|
Button {
|
||||||
visible: carousel.currentIndex < (carousel.itemsCount - 1)
|
visible: carousel.currentIndex < (carousel.itemsCount - 1)
|
||||||
flat: true
|
flat: true
|
||||||
|
Layout.rightMargin: 50 * DefaultStyle.dp
|
||||||
|
Layout.alignment: Qt.AlignVCenter | Layout.AlignRight
|
||||||
background: Item {
|
background: Item {
|
||||||
visible: false
|
visible: false
|
||||||
}
|
}
|
||||||
|
|
@ -53,26 +57,27 @@ LoginLayout {
|
||||||
mainItem.startButtonPressed()
|
mainItem.startButtonPressed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
centerContent: Item {
|
centerContent: ColumnLayout {
|
||||||
id: centerLayout
|
spacing: 76 * DefaultStyle.dp
|
||||||
Layout.bottomMargin: 20 * DefaultStyle.dp
|
anchors.left: parent.left
|
||||||
Layout.fillWidth: false
|
anchors.top: parent.top
|
||||||
Layout.fillHeight: false
|
anchors.leftMargin: 308 * DefaultStyle.dp
|
||||||
Layout.leftMargin: 250 * DefaultStyle.dp
|
anchors.topMargin: 166 * DefaultStyle.dp
|
||||||
Layout.topMargin: 165 * DefaultStyle.dp
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: carouselLayout
|
id: carouselLayout
|
||||||
Image {
|
Image {
|
||||||
id: carouselImg
|
id: carouselImg
|
||||||
Layout.rightMargin: 40 * DefaultStyle.dp
|
// Layout.rightMargin: 40 * DefaultStyle.dp
|
||||||
Layout.preferredWidth: 153.22 * DefaultStyle.dp
|
Layout.preferredWidth: 153.22 * DefaultStyle.dp
|
||||||
Layout.preferredHeight: 156 * DefaultStyle.dp
|
Layout.preferredHeight: 155.9 * DefaultStyle.dp
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
source: carousel.currentIndex == 0 ? AppIcons.welcomeLinphoneLogo : carousel.currentIndex == 1 ? AppIcons.welcomeLock : AppIcons.welcomeOpenSource
|
source: carousel.currentIndex == 0 ? AppIcons.welcomeLinphoneLogo : carousel.currentIndex == 1 ? AppIcons.welcomeLock : AppIcons.welcomeOpenSource
|
||||||
}
|
}
|
||||||
Carousel {
|
Carousel {
|
||||||
id: carousel
|
id: carousel
|
||||||
|
Layout.leftMargin: 75.78 * DefaultStyle.dp
|
||||||
itemsCount: slideRepeater.count
|
itemsCount: slideRepeater.count
|
||||||
itemsList: Repeater {
|
itemsList: Repeater {
|
||||||
id: slideRepeater
|
id: slideRepeater
|
||||||
|
|
@ -80,10 +85,9 @@ LoginLayout {
|
||||||
{title: qsTr("Linphone"), text: qsTr("Une application de communication <b>sécurisée</b>,<br> <b>open source</b> et <b>française</b>.")},
|
{title: qsTr("Linphone"), text: qsTr("Une application de communication <b>sécurisée</b>,<br> <b>open source</b> et <b>française</b>.")},
|
||||||
{title: qsTr("Sécurisé"), text: qsTr("Vos communications sont en sécurité grâce aux <br><b>Chiffrement de bout en bout</b>.")},
|
{title: qsTr("Sécurisé"), text: qsTr("Vos communications sont en sécurité grâce aux <br><b>Chiffrement de bout en bout</b>.")},
|
||||||
{title: qsTr("Open Source"), text: qsTr("Une application open source et un <b>service gratuit</b> <br>depuis <b>2001</b>")}
|
{title: qsTr("Open Source"), text: qsTr("Une application open source et un <b>service gratuit</b> <br>depuis <b>2001</b>")}
|
||||||
// {title: qsTr("Sécurisé"), text: qsTr("Vos communications sont en sécurité grâce aux <br><b>Chiffrement de bout en bout</b>.")}
|
|
||||||
]
|
]
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
spacing: 15 * DefaultStyle.dp
|
spacing: 10 * DefaultStyle.dp
|
||||||
Text {
|
Text {
|
||||||
id: title
|
id: title
|
||||||
text: modelData.title
|
text: modelData.title
|
||||||
|
|
@ -106,12 +110,7 @@ LoginLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
anchors.top: carouselLayout.bottom
|
Layout.leftMargin: 509 * DefaultStyle.dp
|
||||||
anchors.right: carouselLayout.right
|
|
||||||
anchors.topMargin: 20 * DefaultStyle.dp
|
|
||||||
anchors.bottomMargin: 20 * DefaultStyle.dp
|
|
||||||
anchors.leftMargin: (centerLayout.width - width) * DefaultStyle.dp
|
|
||||||
y: centerLayout.implicitWidth - width
|
|
||||||
leftPadding: 20 * DefaultStyle.dp
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
rightPadding: 20 * DefaultStyle.dp
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
topPadding: 11 * DefaultStyle.dp
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import QtQuick 2.15
|
||||||
QtObject {
|
QtObject {
|
||||||
property string welcomeLinphoneLogo: "image://internal/linphone.svg"
|
property string welcomeLinphoneLogo: "image://internal/linphone.svg"
|
||||||
property string welcomeLock: "image://internal/secured.svg"
|
property string welcomeLock: "image://internal/secured.svg"
|
||||||
|
property string lock: "image://internal/lock.svg"
|
||||||
property string welcomeOpenSource: "image://internal/open_source.svg"
|
property string welcomeOpenSource: "image://internal/open_source.svg"
|
||||||
property string eyeHide: "image://internal/eye.svg"
|
property string eyeHide: "image://internal/eye.svg"
|
||||||
property string eyeShow: "image://internal/eye-slash.svg"
|
property string eyeShow: "image://internal/eye-slash.svg"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue