linphone-desktop/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
Julien Wadel d015ffbf14 Fix alone text in participant list (video conference).
Reload devices when entering in settings.
Remove workaround for reloading video devices while in call.
Add capture feedback in waiting room and change buttons layout.
Replace options icones.
2022-06-29 15:26:59 +02:00

210 lines
5.5 KiB
QML

import QtQuick 2.7
import QtQuick.Controls 2.7
import QtQuick.Layouts 1.3
import Common 1.0
import Common.Styles 1.0
import Linphone 1.0
import Linphone.Styles 1.0
import Utils 1.0
import App.Styles 1.0
// =============================================================================
DialogPlus {
property var call
property bool fixedSize : true
property int fitHeight: MultimediaParametersDialogStyle.height+30
property int fitWidth: MultimediaParametersDialogStyle.width
// ---------------------------------------------------------------------------
buttons: [
TextButtonB {
text: qsTr('ok')
onClicked: {
if(call)
call.updateStreams()
exit(0)
}
}
]
buttonsAlignment: Qt.AlignCenter
onVisibleChanged: if(visible) {SettingsModel.reloadDevices()}
Component.onCompleted: {
SettingsModel.stopCaptureGraph()
SettingsModel.reloadDevices()
SettingsModel.startCaptureGraph()
if( fixedSize){
height = fitHeight
width = fitWidth
}
}
Component.onDestruction: SettingsModel.stopCaptureGraph()
onCallChanged: !call && exit(0)
//: 'Multimedia parameters' : Menu title to show multimedia devices configuration.
title: qsTr('menuMultimedia')
// ---------------------------------------------------------------------------
Column {
anchors.fill: parent
anchors.topMargin: MultimediaParametersDialogStyle.column.spacing
spacing: MultimediaParametersDialogStyle.column.spacing
RowLayout {
spacing: MultimediaParametersDialogStyle.column.entry.spacing
width: parent.width
Icon {
Layout.alignment: Qt.AlignTop
Layout.preferredHeight: ComboBoxStyle.background.height
icon: MultimediaParametersDialogStyle.column.entry.speaker.icon
overwriteColor: MultimediaParametersDialogStyle.column.entry.speaker.color
iconSize: MultimediaParametersDialogStyle.column.entry.speaker.iconSize
}
Column {
Layout.fillWidth: true
spacing: MultimediaParametersDialogStyle.column.entry.spacing2
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.playbackDevice
})
model: SettingsModel.playbackDevices
width: parent.width
onActivated: SettingsModel.playbackDevice = model[index]
}
Slider {
id: playbackSlider
width: parent.width
value: call ? value = call.speakerVolumeGain : value = SettingsModel.playbackGain
onPositionChanged: if(call)
call.speakerVolumeGain = position
else
SettingsModel.playbackGain = position
ToolTip {
parent: playbackSlider.handle
visible: playbackSlider.pressed
text: (playbackSlider.value * 100).toFixed(0) + " %"
}
}
}
}
RowLayout {
spacing: MultimediaParametersDialogStyle.column.entry.spacing
width: parent.width
Icon {
Layout.alignment: Qt.AlignTop
Layout.preferredHeight: ComboBoxStyle.background.height
icon: MultimediaParametersDialogStyle.column.entry.micro.icon
overwriteColor: MultimediaParametersDialogStyle.column.entry.micro.color
iconSize: MultimediaParametersDialogStyle.column.entry.micro.iconSize
}
Column {
Layout.fillWidth: true
spacing: MultimediaParametersDialogStyle.column.entry.spacing2
ComboBox {
currentIndex: Utils.findIndex(model, function (device) {
return device === SettingsModel.captureDevice
})
model: SettingsModel.captureDevices
width: parent.width
onActivated: SettingsModel.captureDevice = model[index]
}
Slider {
id: captureSlider
width: parent.width
value: call ? call.microVolumeGain : SettingsModel.captureGain
onPositionChanged: if(call)
call.microVolumeGain = position
else
SettingsModel.captureGain = position
ToolTip {
parent: captureSlider.handle
visible: captureSlider.pressed
text: "+ " + (captureSlider.value * 100).toFixed(0) + " %"
}
}
Slider {
id: audioTestSlider
enabled: false
width: parent.width
height: 8
background: Rectangle {
x: audioTestSlider.leftPadding
y: audioTestSlider.topPadding + audioTestSlider.availableHeight / 2 - height / 2
implicitWidth: 200
implicitHeight: 8
width: audioTestSlider.availableWidth
height: implicitHeight
radius: 2
color: SettingsAudioStyle.sliderBackgroundColor
Rectangle {
width: audioTestSlider.visualPosition * parent.width
height: parent.height
color: audioTestSlider.value > 0.8 ? SettingsAudioStyle.sliderHighColor : SettingsAudioStyle.sliderLowColor
radius: 2
}
}
//Empty slider handle
handle: Text {text: ''; visible: false }
Timer {
interval: 50
repeat: true
running: SettingsModel.captureGraphRunning || call || false
onTriggered: call ? parent.value = call.microVu : parent.value = SettingsModel.getMicVolume()
}
}
}
}
RowLayout {
spacing: MultimediaParametersDialogStyle.column.entry.spacing
width: parent.width
Icon {
icon: MultimediaParametersDialogStyle.column.entry.camera.icon
overwriteColor: MultimediaParametersDialogStyle.column.entry.camera.color
iconSize: MultimediaParametersDialogStyle.column.entry.speaker.iconSize
}
ComboBox {
Layout.fillWidth: true
currentIndex: Number(Utils.findIndex(model, function (device) {
return device === SettingsModel.videoDevice
}))
model: SettingsModel.videoDevices
onActivated: SettingsModel.videoDevice = model[index]
}
}
}
}