linphone-desktop/linphone-app/ui/modules/Linphone/Dialog/MultimediaParametersDialog.qml
Julien Wadel 918b3ae68b Option to deactivate chats and video.
- Replace videoSupported (build-time) by videoEnabled (option).
- Hide chat notifications.
- Add an option to disable video.
- Hide unread messages count.
- Hide mute/ephemerals items.
- Hide conversation's devices/ephemrals/mute/scheduling meetings menu items from conversation.
- Do not use camera in waiting room.
- Hide conference layout.
2023-03-21 11:06:54 +01:00

221 lines
5.9 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.colorModel.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
property bool initialized: false
value: call ? call.speakerVolumeGain : SettingsModel.playbackGain
onPositionChanged: {
if( initialized){
if(call)
call.speakerVolumeGain = position
else
SettingsModel.playbackGain = position
}
}
Component.onCompleted: initialized = true
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.colorModel.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
property bool initialized: false
onPositionChanged: if(initialized){
if(call)
call.microVolumeGain = position
else
SettingsModel.captureGain = position
}
Component.onCompleted: initialized = true
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.color
Rectangle {
width: audioTestSlider.visualPosition * parent.width
height: parent.height
color: audioTestSlider.value > 0.8 ? SettingsAudioStyle.sliderHighColor.color : SettingsAudioStyle.sliderLowColor.color
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
visible: SettingsModel.videoEnabled
Icon {
icon: MultimediaParametersDialogStyle.column.entry.camera.icon
overwriteColor: MultimediaParametersDialogStyle.column.entry.camera.colorModel.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]
}
}
}
}