Files
neochat/src/qml/Page/CallPage.qml
Tobias Fella 39ee17cfa1 ?
2023-06-13 23:32:57 +02:00

139 lines
4.2 KiB
QML

/* SPDX-FileCopyrightText: 2021 Tobias Fella <fella@posteo.de>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.12
import QtQuick.Controls 2.12 as QQC2
import QtQuick.Layouts 1.12
import org.kde.kirigami 2.14 as Kirigami
import QtGraphicalEffects 1.15
import org.kde.neochat 1.0
Kirigami.Page {
id: page
title: CallManager.hasInvite ? i18n("Incoming Call")
: CallManager.isInviting ? i18n("Calling")
: CallManager.state == CallSession.Initiating ? i18n("Configuring Call")
: i18n("Call")
ColumnLayout {
id: column
anchors.fill: parent
RowLayout {
id: streams
Layout.fillWidth: true
Layout.fillHeight: true
Repeater {
id: videos
model: CallManager.callParticipants
delegate: VideoStreamDelegate {
Layout.fillHeight: true
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
}
}
}
Kirigami.Avatar {
visible: videos.count === 0
Layout.preferredWidth: Kirigami.Units.iconSizes.huge
Layout.preferredHeight: Kirigami.Units.iconSizes.huge
Layout.alignment: Qt.AlignHCenter
name: CallManager.room.displayName
source: "image://mxc/" + CallManager.room.avatarMediaId
}
//QQC2.Label {
//text: CallManager.remoteUser.displayName
//horizontalAlignment: Text.AlignHCenter
//Layout.fillWidth: true
//}
//QQC2.Label {
//text: CallManager.room.displayName
//horizontalAlignment: Text.AlignHCenter
//Layout.fillWidth: true
//}
RowLayout {
Layout.alignment: Qt.AlignHCenter
id: buttonRow
spacing: Kirigami.Units.gridUnit
CallPageButton {
text: i18n("Accept")
icon.name: "call-start"
shimmering: true
temprament: CallPageButton.Constructive
visible: CallManager.globalState === CallManager.INCOMING
onClicked: {
visible = false; //TODO declarify
CallManager.acceptCall()
}
}
CallPageButton {
text: checked ? i18n("Disable Camera") : i18n("Enable Camera")
icon.name: checked ? "camera-on" : "camera-off"
checkable: true
onToggled: CallManager.toggleCamera()
}
CallPageButton {
text: checked ? i18n("Unmute Speaker") : i18n("Mute Speaker")
icon.name: checked ? "audio-volume-muted" : "audio-speakers-symbolic"
checkable: true
}
CallPageButton {
text: checked ? i18n("Unmute Microphone") : i18n("Mute Microphone")
icon.name: checked ? "microphone-sensitivity-muted" : "microphone-sensitivity-high"
checkable: true
checked: CallManager.muted
onToggled: CallManager.muted = !CallManager.muted
}
CallPageButton {
text: i18n("Configure Devices")
icon.name: "settings-configure"
onClicked: callConfigurationSheet.open()
}
CallPageButton {
id: denyButton
visible: CallManager.globalState === CallManager.INCOMING
text: i18n("Deny")
icon.name: "call-stop"
shimmering: true
temprament: CallPageButton.Destructive
onClicked: CallManager.hangupCall()
}
CallPageButton {
visible: !denyButton.visible
text: CallManager.isInviting ? i18n("Cancel") : i18n("Hang Up")
icon.name: "call-stop"
shimmering: CallManager.isInviting
temprament: CallPageButton.Destructive
onClicked: CallManager.hangupCall()
}
}
}
Connections {
target: CallManager
function onCallEnded() {
page.closeDialog()
}
}
}