nheko/resources/qml/voip/CallInvite.qml

174 lines
5.1 KiB
QML
Raw Normal View History

2021-01-12 20:22:52 +01:00
import "../"
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2
import im.nheko 1.0
Popup {
closePolicy: Popup.NoAutoClose
width: parent.width
height: parent.height
palette: colors
background: Rectangle {
color: colors.window
border.color: colors.windowText
}
Component {
id: deviceError
DeviceError {
}
}
Connections {
target: CallManager
onNewInviteState: {
if (!CallManager.haveCallInvite) {
close();
}
}
}
ColumnLayout {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
spacing: 48
Item {
Layout.fillHeight: true
}
Label {
Layout.alignment: Qt.AlignCenter
text: CallManager.callParty
font.pointSize: fontMetrics.font.pointSize * 2
color: colors.windowText
}
Avatar {
Layout.alignment: Qt.AlignCenter
width: avatarSize * 4
height: avatarSize * 4
url: CallManager.callPartyAvatarUrl.replace("mxc://", "image://MxcImage/")
displayName: CallManager.callParty
}
ColumnLayout {
Layout.alignment: Qt.AlignCenter
Image {
Layout.alignment: Qt.AlignCenter
Layout.preferredWidth: avatarSize
Layout.preferredHeight: avatarSize
property string image: CallManager.isVideo ? ":/icons/icons/ui/video-call.png" : ":/icons/icons/ui/place-call.png"
source: "image://colorimage/" + image + "?" + colors.windowText
}
Label {
Layout.alignment: Qt.AlignCenter
text: CallManager.isVideo ? qsTr("Video Call") : qsTr("Voice Call")
font.pointSize: fontMetrics.font.pointSize * 2
color: colors.windowText
}
}
ColumnLayout {
id: deviceCombos
Layout.alignment: Qt.AlignCenter
property int imageSize: 32
RowLayout {
Layout.alignment: Qt.AlignCenter
Image {
Layout.preferredWidth: deviceCombos.imageSize
Layout.preferredHeight: deviceCombos.imageSize
source: "image://colorimage/:/icons/icons/ui/microphone-unmute.png?" + colors.windowText
}
ComboBox {
id: micCombo
Layout.fillWidth: true
model: CallManager.mics
}
}
RowLayout {
visible: CallManager.isVideo && CallManager.cameras.length > 0
Layout.alignment: Qt.AlignCenter
Image {
Layout.preferredWidth: deviceCombos.imageSize
Layout.preferredHeight: deviceCombos.imageSize
source: "image://colorimage/:/icons/icons/ui/video-call.png?" + colors.windowText
}
ComboBox {
id: cameraCombo
Layout.fillWidth: true
model: CallManager.cameras
}
}
}
RowLayout {
id: buttonLayout
property int iconSize: 64
Layout.alignment: Qt.AlignCenter
spacing: 160
function validateMic() {
if (CallManager.mics.length == 0) {
var dialog = deviceError.createObject(timelineRoot, {
"errorString": qsTr("No microphone found."),
"image": ":/icons/icons/ui/place-call.png"
});
dialog.open();
return false;
}
return true;
}
RoundButton {
icon.source: "qrc:/icons/icons/ui/end-call.png"
icon.width: buttonLayout.iconSize
icon.height: buttonLayout.iconSize
icon.color: "#ffffff"
palette.button: "#ff0000"
onClicked: {
CallManager.hangUp();
close();
}
}
RoundButton {
icon.source: CallManager.isVideo ? "qrc:/icons/icons/ui/video-call.png" : "qrc:/icons/icons/ui/place-call.png"
icon.width: buttonLayout.iconSize
icon.height: buttonLayout.iconSize
icon.color: "#ffffff"
palette.button: "#00ff00"
onClicked: {
if (buttonLayout.validateMic()) {
Settings.microphone = micCombo.currentText;
if (cameraCombo.visible)
Settings.camera = cameraCombo.currentText;
CallManager.acceptInvite();
close();
}
}
}
}
Item {
Layout.fillHeight: true
}
}
}