linphone-desktop/Linphone/view/Page/Layout/Settings/AccountSettingsGeneralLayout.qml
Gaelle Braud a0850b9967 fix #LINQT-2130 enable video in conference for the participant to be able to see shared screen without activating camera
do not display notification if message already read

display notif when copying account sip address #LINQT-2126

prevent adding our own address in participants (fix #LINQT-2164)
2025-11-13 17:43:55 +01:00

383 lines
13 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 QtCore
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import QtQuick.Dialogs
import Linphone
import SettingsCpp
import UtilsCpp
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
AbstractSettingsLayout {
id: mainItem
saveButtonVisible: false
width: parent?.width
contentModel: [
{
//: "Détails"
title: qsTr("manage_account_details_title"),
//: Éditer les informations de votre compte.
subTitle: qsTr("manage_account_details_subtitle"),
contentComponent: accountParametersComponent
},
{
visible: SettingsCpp.showAccountDevices,
//: "Vos appareils"
title: qsTr("manage_account_devices_title"),
//: "La liste des appareils connectés à votre compte. Vous pouvez retirer les appareils que vous nutilisez plus."
subTitle: qsTr("manage_account_devices_subtitle"),
contentComponent: accountDevicesComponent
}
]
property alias account: mainItem.model
// Account parameters
//////////////////////////
Component {
id: accountParametersComponent
ColumnLayout {
Layout.fillWidth: true
spacing: Utils.getSizeWithScreenRatio(20)
Avatar {
id: avatar
account: model
displayPresence: false
Layout.preferredWidth: Utils.getSizeWithScreenRatio(100)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(100)
Layout.alignment: Qt.AlignHCenter
}
IconLabelButton {
visible: model.core.pictureUri.length === 0
Layout.preferredWidth: width
icon.source: AppIcons.camera
icon.width: Utils.getSizeWithScreenRatio(17)
icon.height: Utils.getSizeWithScreenRatio(17)
//: "Ajouter une image"
text: qsTr("manage_account_add_picture")
style: ButtonStyle.noBackground
onClicked: fileDialog.open()
Layout.alignment: Qt.AlignHCenter
}
RowLayout {
visible: model.core.pictureUri.length > 0
Layout.alignment: Qt.AlignHCenter
spacing: Utils.getSizeWithScreenRatio(5)
IconLabelButton {
Layout.preferredWidth: width
icon.source: AppIcons.pencil
icon.width: Utils.getSizeWithScreenRatio(17)
icon.height: Utils.getSizeWithScreenRatio(17)
//: "Modifier l'image"
text: qsTr("manage_account_edit_picture")
style: ButtonStyle.noBackground
onClicked: fileDialog.open()
}
IconLabelButton {
Layout.preferredWidth: width
icon.source: AppIcons.trashCan
icon.width: Utils.getSizeWithScreenRatio(17)
icon.height: Utils.getSizeWithScreenRatio(17)
//: "Supprimer l'image"
text: qsTr("manage_account_remove_picture")
style: ButtonStyle.noBackground
onClicked: model.core.pictureUri = ""
}
}
FileDialog {
id: fileDialog
currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
onAccepted: {
var avatarPath = UtilsCpp.createAvatar( selectedFile )
if(avatarPath){
model.core.pictureUri = avatarPath
avatar.model = model
}
}
}
RowLayout {
Layout.fillWidth: true
spacing: Utils.getSizeWithScreenRatio(5)
Text {
Layout.alignment: Qt.AlignLeft
//: SIP address
text: "%1 :".arg(qsTr("sip_address"))
color: DefaultStyle.main2_600
font: Typography.p2l
}
Text {
Layout.alignment: Qt.AlignLeft
text: model.core.identityAddress
color: DefaultStyle.main2_600
font: Typography.p1
}
Item {
Layout.fillWidth: true
}
IconLabelButton {
Layout.alignment: Qt.AlignRight
icon.source: AppIcons.copy
style: ButtonStyle.noBackground
onClicked: {
if (UtilsCpp.copyToClipboard(model.core.identityAddress)) {
//: Copied
UtilsCpp.showInformationPopup(qsTr("copied"),
//: Your SIP address has been copied in the clipboard
qsTr("account_settings_sip_address_copied_message"))
} else {
UtilsCpp.showInformationPopup(qsTr("error"),
//: Error copying your SIP address
qsTr("account_settings_sip_address_copied_error_message"))
}
}
}
}
ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(5)
Layout.alignment: Qt.AlignLeft
Text {
//: "Nom d'affichage
text: qsTr("sip_address_display_name")
color: DefaultStyle.main2_600
font: Typography.p2l
}
Text {
//: "Le nom qui sera affiché à vos correspondants lors de vos échanges."
text: qsTr("sip_address_display_name_explaination")
color: DefaultStyle.main2_600
font: Typography.p1
}
}
TextField {
Layout.alignment: Qt.AlignLeft
Layout.fillWidth: true
Layout.preferredHeight: Utils.getSizeWithScreenRatio(49)
initialText: model.core.displayName
backgroundColor: DefaultStyle.grey_100
onEditingFinished: {
if (text.length != 0) model.core.displayName = text
}
toValidate: true
}
Text {
//: Indicatif international*
text: qsTr("manage_account_international_prefix")
color: DefaultStyle.main2_600
font: Typography.p2l
}
ComboSetting {
Layout.fillWidth: true
Layout.topMargin: Utils.getSizeWithScreenRatio(15)
entries: account.core.dialPlans
propertyName: "dialPlan"
propertyOwnerGui: account
textRole: 'text'
flagRole: 'flag'
}
SwitchSetting {
titleText: account?.core.humaneReadableRegistrationState
subTitleText: account?.core.humaneReadableRegistrationStateExplained
propertyName: "registerEnabled"
propertyOwnerGui: account
}
RowLayout {
id:mainItem
spacing : Utils.getSizeWithScreenRatio(20)
ColumnLayout {
spacing : Utils.getSizeWithScreenRatio(5)
Text {
//: "Déconnecter mon compte"
text: qsTr("manage_account_delete")
font: Typography.p2l
wrapMode: Text.WordWrap
color: DefaultStyle.danger_500_main
Layout.fillWidth: true
}
Text {
// "Votre compte sera retiré de ce client linphone, mais vous restez connecté sur vos autres clients
text: qsTr("manage_account_delete_message")
font: Typography.p1
wrapMode: Text.WordWrap
color: DefaultStyle.main2_500_main
Layout.fillWidth: true
}
}
Item {
Layout.fillWidth: true
}
BigButton {
style: ButtonStyle.noBackgroundRed
Layout.alignment: Qt.AlignRight
Layout.rightMargin: Utils.getSizeWithScreenRatio(5)
icon.source: AppIcons.trashCan
onClicked: {
var mainWin = UtilsCpp.getMainWindow()
mainWin.showConfirmationLambdaPopup("",
//: "Se déconnecter du compte ?"
qsTr("manage_account_dialog_remove_account_title"),
//: Si vous souhaitez supprimer définitivement votre compte rendez-vous sur : https://sip.linphone.org
qsTr("manage_account_dialog_remove_account_message"),
function (confirmed) {
if (confirmed) {
account.core.removeAccount()
}
}
)
}
}
}
}
}
// Account devices
//////////////////////////
Component {
id: accountDevicesComponent
RoundedPane {
Layout.fillWidth: true
Layout.fillHeight: true
// Layout.minimumHeight: account.core.devices.length *Utils.getSizeWithScreenRatio(133) + (account.core.devices.length - 1) *Utils.getSizeWithScreenRatio(15) + 2 *Utils.getSizeWithScreenRatio(21)
Layout.rightMargin: Utils.getSizeWithScreenRatio(30)
Layout.topMargin: Utils.getSizeWithScreenRatio(20)
Layout.bottomMargin: Utils.getSizeWithScreenRatio(4)
Layout.leftMargin: Utils.getSizeWithScreenRatio(44)
topPadding: Utils.getSizeWithScreenRatio(21)
bottomPadding: Utils.getSizeWithScreenRatio(21)
leftPadding: Utils.getSizeWithScreenRatio(17)
rightPadding: Utils.getSizeWithScreenRatio(17)
background: Rectangle {
anchors.fill: parent
color: DefaultStyle.grey_100
radius: Utils.getSizeWithScreenRatio(15)
}
contentItem: ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(15)
BusyIndicator {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(60)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(60)
Layout.alignment: Qt.AlignHCenter
visible: devices.loading
}
Repeater {
id: devices
visible: !loading
property bool loading
Component.onCompleted: loading = true
model: AccountDeviceProxy {
id: accountDeviceProxy
account: mainItem.model
onDevicesSet: devices.loading = false;
onRequestError: (errorMessage) => {
devices.loading = false;
//: Erreur
mainWindow.showInformationPopup(qsTr("error"), errorMessage, false)
}
}
Control.Control {
Layout.fillWidth: true
height: Utils.getSizeWithScreenRatio(133)
topPadding: Utils.getSizeWithScreenRatio(26)
bottomPadding: Utils.getSizeWithScreenRatio(26)
rightPadding: Utils.getSizeWithScreenRatio(36)
leftPadding: Utils.getSizeWithScreenRatio(33)
background: Rectangle {
anchors.fill: parent
color: DefaultStyle.grey_0
radius: Utils.getSizeWithScreenRatio(10)
}
contentItem: ColumnLayout {
width: parent.width
spacing: Utils.getSizeWithScreenRatio(20)
RowLayout {
spacing: Utils.getSizeWithScreenRatio(5)
EffectImage {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
fillMode: Image.PreserveAspectFit
colorizationColor: DefaultStyle.main2_600
imageSource: modelData.core.userAgent.toLowerCase().includes('ios') | modelData.core.userAgent.toLowerCase().includes('android') ? AppIcons.mobile : AppIcons.desktop
}
Text {
text: modelData.core.deviceName
color: DefaultStyle.main2_600
font: Typography.p2
}
Item {
Layout.fillWidth: true
}
MediumButton {
Layout.alignment: Qt.AlignRight
//: "Supprimer"
text: qsTr("manage_account_device_remove")
icon.source: AppIcons.trashCan
icon.width: Utils.getSizeWithScreenRatio(16)
icon.height: Utils.getSizeWithScreenRatio(16)
style: ButtonStyle.tertiary
onClicked: {
var mainWin = UtilsCpp.getMainWindow()
mainWin.showConfirmationLambdaPopup("",
//:"Supprimer %1 ?"
qsTr("manage_account_device_remove_confirm_dialog").arg(modelData.core.deviceName), "",
function (confirmed) {
if (confirmed) {
accountDeviceProxy.deleteDevice(modelData)
}
}
)
}
}
}
RowLayout {
spacing: Utils.getSizeWithScreenRatio(5)
Text {
//: "Dernière connexion:"
text: qsTr("manage_account_device_last_connection")
color: DefaultStyle.main2_600
font: Typography.p2
}
EffectImage {
visible: dateText.lastDate != ""
Layout.preferredWidth: Utils.getSizeWithScreenRatio(20)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(20)
imageSource: AppIcons.calendarBlank
colorizationColor: DefaultStyle.main2_600
fillMode: Image.PreserveAspectFit
}
Text {
id: dateText
property string lastDate: UtilsCpp.formatDate(modelData.core.lastUpdateTimestamp,false)
text: lastDate != ""
? lastDate
//: "No information"
: qsTr("device_last_updated_time_no_info")
color: DefaultStyle.main2_600
font: Typography.p1
}
EffectImage {
visible: dateText.lastDate != ""
Layout.preferredWidth: Utils.getSizeWithScreenRatio(20)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(20)
imageSource: AppIcons.clock
colorizationColor: DefaultStyle.main2_600
fillMode: Image.PreserveAspectFit
}
Text {
visible: dateText.lastDate != ""
text: UtilsCpp.formatTime(modelData.core.lastUpdateTimestamp)
color: DefaultStyle.main2_600
font: Typography.p1
}
}
}
}
}
}
}
}
}