linphone-desktop/Linphone/view/Control/Container/Call/CallHistoryLayout.qml
Alexandre Jörgensen c73eea248f Format QML files
2026-03-10 12:32:35 +01:00

235 lines
7.9 KiB
QML

import QtQuick
import QtQuick.Effects
import QtQuick.Layouts
import QtQuick.Controls.Basic as Control
import Linphone
import UtilsCpp
import SettingsCpp
import "qrc:/qt/qml/Linphone/view/Style/buttonStyle.js" as ButtonStyle
import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
ColumnLayout {
id: mainItem
spacing: Utils.getSizeWithScreenRatio(30)
property var callHistoryGui
property FriendGui contact
property var conferenceInfo: callHistoryGui?.core.conferenceInfo
property var chatGui: callHistoryGui?.core.chatGui
property bool isConference: conferenceInfo != undefined && conferenceInfo != null
property string contactAddress: specificAddress != "" ? specificAddress : contact && contact.core.defaultAddress || ""
property var computedContactNameObj: UtilsCpp.getDisplayName(contactAddress)
property string computedContactName: computedContactNameObj ? computedContactNameObj.value : ""
property string contactName: contact ? contact.core.fullName : callHistoryGui ? callHistoryGui.core.displayName :
computedContactName
// Set this property to get the security informations
// for a specific address and not for the entire contact
property string specificAddress: ""
property alias buttonContent: rightButton.data
property alias detailContent: detailControl.data
signal conferenceChatDisplayRequested
signal conferenceCallHistoryDisplayRequested
ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(13)
Layout.alignment: Qt.AlignHCenter
Item {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(360)
Layout.preferredHeight: detailAvatar.height
Layout.alignment: Qt.AlignHCenter
Avatar {
id: detailAvatar
anchors.horizontalCenter: parent.horizontalCenter
width: Utils.getSizeWithScreenRatio(100)
height: Utils.getSizeWithScreenRatio(100)
contact: mainItem.contact || null
isConference: !!mainItem.conferenceInfo
displayNameVal: mainItem.contactName
secured: securityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified
}
Item {
id: rightButton
anchors.right: parent.right
anchors.verticalCenter: detailAvatar.verticalCenter
anchors.rightMargin: Utils.getSizeWithScreenRatio(20)
width: Utils.getSizeWithScreenRatio(30)
height: Utils.getSizeWithScreenRatio(30)
}
}
ColumnLayout {
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: Utils.getSizeWithScreenRatio(360)
spacing: Utils.getSizeWithScreenRatio(5)
ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(2)
Layout.alignment: Qt.AlignHCenter
Text {
Layout.preferredWidth: implicitWidth
Layout.alignment: Qt.AlignHCenter
horizontalAlignment: Text.AlignHCenter
elide: Text.ElideRight
text: detailAvatar.displayNameVal
maximumLineCount: 1
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
Text {
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
visible: mainItem.specificAddress != "" && !mainItem.isConference
text: SettingsCpp.hideSipAddresses ? UtilsCpp.getUsername(mainItem.specificAddress) : mainItem.specificAddress
elide: Text.ElideMiddle
maximumLineCount: 1
font {
pixelSize: Utils.getSizeWithScreenRatio(12)
weight: Utils.getSizeWithScreenRatio(300)
}
}
}
Text {
Layout.alignment: Qt.AlignHCenter
horizontalAlignment: Text.AlignHCenter
Layout.fillWidth: true
visible: mainItem.contact
text: contact ? contact.core.presenceStatus : ""
color: contact ? contact.core.presenceColor : 'transparent'
font {
pixelSize: Utils.getSizeWithScreenRatio(12)
weight: Utils.getSizeWithScreenRatio(300)
}
}
}
}
MediumButton {
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature && !confWithChatLayout.visible
Layout.alignment: Qt.AlignHCenter
//: "Rejoindre la réunion"
text: qsTr("meeting_info_join_title")
style: ButtonStyle.grey
onClicked: {
if (mainItem.conferenceInfo) {
var callsWindow = UtilsCpp.getOrCreateCallsWindow();
callsWindow.setupConference(mainItem.conferenceInfo);
UtilsCpp.smartShowWindow(callsWindow);
}
}
}
RowLayout {
id: confWithChatLayout
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature && mainItem.chatGui !== null
Layout.alignment: Qt.AlignHCenter
spacing: Utils.getSizeWithScreenRatio(72)
// Layout.fillWidth: true
Layout.preferredHeight: childrenRect.height
LabelButton {
visible: !SettingsCpp.disableChatFeature
width: Utils.getSizeWithScreenRatio(56)
height: Utils.getSizeWithScreenRatio(56)
button.icon.width: Utils.getSizeWithScreenRatio(24)
button.icon.height: Utils.getSizeWithScreenRatio(24)
button.icon.source: AppIcons.videoconference
//: "Join"
label: qsTr("meeting_info_join_title")
button.onClicked: if (mainItem.conferenceInfo) {
var callsWindow = UtilsCpp.getOrCreateCallsWindow();
callsWindow.setupConference(mainItem.conferenceInfo);
UtilsCpp.smartShowWindow(callsWindow);
}
}
LabelButton {
visible: !SettingsCpp.disableChatFeature
button.checkable: true
width: Utils.getSizeWithScreenRatio(56)
height: Utils.getSizeWithScreenRatio(56)
button.icon.width: Utils.getSizeWithScreenRatio(24)
button.icon.height: Utils.getSizeWithScreenRatio(24)
button.icon.source: button.checked ? AppIcons.callList : AppIcons.chatTeardropText
label: button.checked ?
//: "Call history"
qsTr("contact_call_history_action") :
//: "Conversation"
qsTr("contact_conversation_action")
button.onCheckedChanged: {
if (button.checked)
mainItem.conferenceChatDisplayRequested();
else
mainItem.conferenceCallHistoryDisplayRequested();
}
}
}
RowLayout {
Layout.alignment: Qt.AlignHCenter
spacing: Utils.getSizeWithScreenRatio(72)
Layout.fillWidth: true
Layout.preferredHeight: childrenRect.height
visible: !mainItem.isConference
LabelButton {
width: Utils.getSizeWithScreenRatio(56)
height: Utils.getSizeWithScreenRatio(56)
button.icon.width: Utils.getSizeWithScreenRatio(24)
button.icon.height: Utils.getSizeWithScreenRatio(24)
button.icon.source: AppIcons.phone
//: "Appel"
label: qsTr("contact_call_action")
button.onClicked: {
if (mainItem.specificAddress === "")
mainWindow.startCallWithContact(mainItem.contact, false, mainItem);
else
UtilsCpp.createCall(mainItem.specificAddress);
}
}
LabelButton {
visible: !SettingsCpp.disableChatFeature
width: Utils.getSizeWithScreenRatio(56)
height: Utils.getSizeWithScreenRatio(56)
button.icon.width: Utils.getSizeWithScreenRatio(24)
button.icon.height: Utils.getSizeWithScreenRatio(24)
button.icon.source: AppIcons.chatTeardropText
//: "Message"
label: qsTr("contact_message_action")
button.onClicked: {
console.debug("[CallHistoryLayout.qml] Open conversation");
if (mainItem.specificAddress === "") {
mainWindow.sendMessageToContact(mainItem.contact);
} else {
console.log("specific address", mainItem.specificAddress);
mainWindow.displayChatPage(mainItem.specificAddress);
}
}
}
LabelButton {
visible: SettingsCpp.videoEnabled
width: Utils.getSizeWithScreenRatio(56)
height: Utils.getSizeWithScreenRatio(56)
button.icon.width: Utils.getSizeWithScreenRatio(24)
button.icon.height: Utils.getSizeWithScreenRatio(24)
button.icon.source: AppIcons.videoCamera
//: "Appel Video"
label: qsTr("contact_video_call_action")
button.onClicked: {
if (mainItem.specificAddress === "")
mainWindow.startCallWithContact(mainItem.contact, true, mainItem);
else
UtilsCpp.createCall(mainItem.specificAddress, {
'localVideoEnabled': true
});
}
}
}
ColumnLayout {
id: detailControl
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: Utils.getSizeWithScreenRatio(30)
}
}