linux.x86.linphone/Linphone/view/App/Layout/ContactLayout.qml

161 lines
4.3 KiB
QML

import QtQuick 2.15
import QtQuick.Effects
import QtQuick.Layouts
import QtQuick.Controls as Control
import Linphone
import UtilsCpp 1.0
ColumnLayout {
id: mainItem
spacing: 30 * DefaultStyle.dp
property var contact
property string contactAddress: contact && contact.core.defaultAddress || ""
property string contactName: contact && contact.core.displayName || ""
property bool addressVisible: true
property alias buttonContent: rightButton.data
property alias detailContent: detailControl.data
component LabelButton: ColumnLayout {
id: labelButton
property alias image: buttonImg
property alias button: button
property string label
spacing: 8 * DefaultStyle.dp
Button {
id: button
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: 56 * DefaultStyle.dp
Layout.preferredHeight: 56 * DefaultStyle.dp
topPadding: 16 * DefaultStyle.dp
bottomPadding: 16 * DefaultStyle.dp
leftPadding: 16 * DefaultStyle.dp
rightPadding: 16 * DefaultStyle.dp
background: Rectangle {
anchors.fill: parent
radius: 40 * DefaultStyle.dp
color: DefaultStyle.main2_200
}
contentItem: Image {
id: buttonImg
source: labelButton.source
width: 24 * DefaultStyle.dp
height: 24 * DefaultStyle.dp
fillMode: Image.PreserveAspectFit
sourceSize.width: 24 * DefaultStyle.dp
sourceSize.height: 24 * DefaultStyle.dp
}
}
Text {
Layout.alignment: Qt.AlignHCenter
text: labelButton.label
font {
pixelSize: 14 * DefaultStyle.dp
weight: 400 * DefaultStyle.dp
}
}
}
Item {
Layout.preferredWidth: mainItem.implicitWidth
Layout.preferredHeight: detailAvatar.height
// Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
Avatar {
// TODO : find friend and pass contact argument
id: detailAvatar
anchors.horizontalCenter: parent.horizontalCenter
width: 100 * DefaultStyle.dp
height: 100 * DefaultStyle.dp
contact: mainItem.contact || null
address: !contact && mainItem.contactAddress || mainItem.contactName
}
Item {
id: rightButton
anchors.right: parent.right
anchors.verticalCenter: detailAvatar.verticalCenter
anchors.rightMargin: 20 * DefaultStyle.dp
width: 30 * DefaultStyle.dp
height: 30 * DefaultStyle.dp
}
}
ColumnLayout {
Layout.alignment: Qt.AlignHCenter
// Layout.fillWidth: true
Text {
Layout.alignment: Qt.AlignHCenter
text: mainItem.contactName
horizontalAlignment: Text.AlignHCenter
font {
pixelSize: 14 * DefaultStyle.dp
weight: 400 * DefaultStyle.dp
}
}
Text {
id: contactAddress
visible: mainItem.addressVisible
text: mainItem.contactAddress
horizontalAlignment: Text.AlignHCenter
font {
pixelSize: 12 * DefaultStyle.dp
weight: 300 * DefaultStyle.dp
}
}
Text {
// connection status
}
}
Item {
// spacing: 10 * DefaultStyle.dp
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: mainItem.implicitWidth
Layout.preferredHeight: childrenRect.height
// Layout.fillHeight: true
LabelButton {
anchors.left: parent.left
// width: 24 * DefaultStyle.dp//image.width
// height: image.height
image.source: AppIcons.phone
label: qsTr("Appel")
property var callObj
button.onClicked: {
var addr = UtilsCpp.generateLinphoneSipAddress(mainItem.contact.core.defaultAddress)
callObj = UtilsCpp.createCall(addr)
}
}
LabelButton {
anchors.horizontalCenter: parent.horizontalCenter
// Layout.preferredWidth: image.width
// Layout.preferredHeight: image.height
image.source: AppIcons.chatTeardropText
label: qsTr("Message")
button.onClicked: console.debug("[CallPage.qml] TODO : open conversation")
}
LabelButton {
id: videoCall
anchors.right: parent.right
// Layout.preferredWidth: image.width
// Layout.preferredHeight: image.height
image.source: AppIcons.videoCamera
label: qsTr("Appel Video")
property var callObj
button.onClicked: {
var addr = UtilsCpp.generateLinphoneSipAddress(mainItem.contact.core.defaultAddress)
callObj = UtilsCpp.createCall(addr)
console.log("[CallPage.qml] TODO : enable video")
}
}
// Item {Layout.fillWidth: true}
}
ColumnLayout {
id: detailControl
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 30 * DefaultStyle.dp
}
}