mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-27 08:49:19 +00:00
feat(ui/modules/Linphone/Codecs): in progress
This commit is contained in:
parent
4c43ae2ffa
commit
3577df4498
7 changed files with 263 additions and 134 deletions
|
|
@ -616,6 +616,10 @@ Server url not configured.</translation>
|
|||
<source>echoCancellationLabel</source>
|
||||
<translation>Enable echo cancellation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioCodecsTitle</source>
|
||||
<translation>Audio codecs</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -819,7 +823,7 @@ Server url not configured.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>deleteAccountDescription</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Are you sure you want to delete this account?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -866,11 +870,11 @@ Server url not configured.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>cancel</source>
|
||||
<translation type="unfinished">CANCEL</translation>
|
||||
<translation>CANCEL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>confirm</source>
|
||||
<translation type="unfinished">CONFIRM</translation>
|
||||
<translation>CONFIRM</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -934,6 +938,10 @@ Server url not configured.</translation>
|
|||
<source>videoSizeLabel</source>
|
||||
<translation>Video resolution</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>videoCodecsTitle</source>
|
||||
<translation>Video codecs</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
|
|
|
|||
|
|
@ -616,6 +616,10 @@ Url du serveur non configurée.</translation>
|
|||
<source>echoCancellationLabel</source>
|
||||
<translation>Activer annulation d'écho</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>audioCodecsTitle</source>
|
||||
<translation>Codecs audio</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsCallsChat</name>
|
||||
|
|
@ -819,7 +823,7 @@ Url du serveur non configurée.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>deleteAccountDescription</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Êtes-vous sûr de vouloir supprimer ce compte ?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -866,11 +870,11 @@ Url du serveur non configurée.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>cancel</source>
|
||||
<translation type="unfinished">ANNULER</translation>
|
||||
<translation>ANNULER</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>confirm</source>
|
||||
<translation type="unfinished">CONFIRMER</translation>
|
||||
<translation>CONFIRMER</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
@ -934,6 +938,10 @@ Url du serveur non configurée.</translation>
|
|||
<source>videoSizeLabel</source>
|
||||
<translation>Définition</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>videoCodecsTitle</source>
|
||||
<translation>Codecs vidéo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWindow</name>
|
||||
|
|
|
|||
|
|
@ -275,6 +275,7 @@
|
|||
<file>ui/modules/Linphone/Chat/Message.js</file>
|
||||
<file>ui/modules/Linphone/Chat/Message.qml</file>
|
||||
<file>ui/modules/Linphone/Chat/OutgoingMessage.qml</file>
|
||||
<file>ui/modules/Linphone/Codecs/CodecsViewer.qml</file>
|
||||
<file>ui/modules/Linphone/Contact/Avatar.qml</file>
|
||||
<file>ui/modules/Linphone/Contact/ContactDescription.qml</file>
|
||||
<file>ui/modules/Linphone/Contact/Contact.qml</file>
|
||||
|
|
|
|||
60
linphone-desktop/ui/modules/Linphone/Codecs/CodecsViewer.qml
Normal file
60
linphone-desktop/ui/modules/Linphone/Codecs/CodecsViewer.qml
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Common 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
ColumnLayout {
|
||||
property alias model: view.model
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
height: 350
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Header.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Row {
|
||||
Layout.fillWidth: true
|
||||
height: 50
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Codecs.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
ScrollableListView {
|
||||
id: view
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
delegate: Rectangle {
|
||||
color: 'red'
|
||||
height: 30
|
||||
width: view.width
|
||||
|
||||
Row {
|
||||
anchors.fill: parent
|
||||
|
||||
Text {
|
||||
text: $codec.mime
|
||||
}
|
||||
|
||||
Text {
|
||||
text: $codec.description
|
||||
}
|
||||
|
||||
Text {
|
||||
text: $codec.channels
|
||||
}
|
||||
|
||||
Text {
|
||||
text: $codec.bitrate
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -14,6 +14,8 @@ Calls 1.0 Calls/Calls.qml
|
|||
|
||||
Chat 1.0 Chat/Chat.qml
|
||||
|
||||
CodecsViewer 1.0 Codecs/CodecsViewer.qml
|
||||
|
||||
Avatar 1.0 Contact/Avatar.qml
|
||||
Contact 1.0 Contact/Contact.qml
|
||||
ContactDescription 1.0 Contact/ContactDescription.qml
|
||||
|
|
|
|||
|
|
@ -4,79 +4,104 @@ import Common 1.0
|
|||
import Linphone 1.0
|
||||
import Utils 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
TabContainer {
|
||||
Form {
|
||||
title: qsTr('audioTitle')
|
||||
Column {
|
||||
spacing: SettingsWindowStyle.forms.spacing
|
||||
width: parent.width
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('playbackDeviceLabel')
|
||||
// -------------------------------------------------------------------------
|
||||
// Audio parameters.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.playbackDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
Form {
|
||||
title: qsTr('audioTitle')
|
||||
width: parent.width
|
||||
|
||||
onActivated: SettingsModel.playbackDevice = model[index]
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('playbackDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.playbackDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
|
||||
onActivated: SettingsModel.playbackDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('captureDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.captureDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
|
||||
onActivated: SettingsModel.captureDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('ringerDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.ringerDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
|
||||
onActivated: SettingsModel.ringerDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('ringLabel')
|
||||
|
||||
FileChooserButton {
|
||||
selectedFile: SettingsModel.ringPath
|
||||
|
||||
onAccepted: SettingsModel.ringPath = selectedFile
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('echoCancellationLabel')
|
||||
|
||||
Switch {
|
||||
checked: SettingsModel.echoCancellationEnabled
|
||||
|
||||
onClicked: SettingsModel.echoCancellationEnabled = !checked
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('captureDeviceLabel')
|
||||
// -------------------------------------------------------------------------
|
||||
// Audio Codecs.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.captureDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
Form {
|
||||
title: qsTr('audioCodecsTitle')
|
||||
width: parent.width
|
||||
|
||||
onActivated: SettingsModel.captureDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('ringerDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.ringerDevice
|
||||
})
|
||||
model: SettingsModel.audioDevices
|
||||
|
||||
onActivated: SettingsModel.ringerDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('ringLabel')
|
||||
|
||||
FileChooserButton {
|
||||
selectedFile: SettingsModel.ringPath
|
||||
|
||||
onAccepted: SettingsModel.ringPath = selectedFile
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('echoCancellationLabel')
|
||||
|
||||
Switch {
|
||||
checked: SettingsModel.echoCancellationEnabled
|
||||
|
||||
onClicked: SettingsModel.echoCancellationEnabled = !checked
|
||||
}
|
||||
CodecsViewer {
|
||||
model: AudioCodecsModel
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,87 +4,112 @@ import Common 1.0
|
|||
import Linphone 1.0
|
||||
import Utils 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
TabContainer {
|
||||
Form {
|
||||
title: qsTr('videoCaptureTitle')
|
||||
Column {
|
||||
spacing: SettingsWindowStyle.forms.spacing
|
||||
width: parent.width
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoInputDeviceLabel')
|
||||
// -------------------------------------------------------------------------
|
||||
// Video parameters.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.videoDevice
|
||||
})
|
||||
model: SettingsModel.videoDevices
|
||||
Form {
|
||||
title: qsTr('videoCaptureTitle')
|
||||
width: parent.width
|
||||
|
||||
onActivated: SettingsModel.videoDevice = model[index]
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoInputDeviceLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: Utils.findIndex(model, function (device) {
|
||||
return device === SettingsModel.videoDevice
|
||||
})
|
||||
model: SettingsModel.videoDevices
|
||||
|
||||
onActivated: SettingsModel.videoDevice = model[index]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoPresetLabel')
|
||||
|
||||
ComboBox {
|
||||
currentIndex: {
|
||||
var preset = SettingsModel.videoPreset
|
||||
|
||||
return Number(Utils.findIndex([ 'default', 'high-fps', 'custom' ], function (value) {
|
||||
return preset === value
|
||||
}))
|
||||
}
|
||||
|
||||
model: ListModel {
|
||||
id: presets
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetDefault')
|
||||
value: 'default'
|
||||
}
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetHighFps')
|
||||
value: 'high-fps'
|
||||
}
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetCustom')
|
||||
value: 'custom'
|
||||
}
|
||||
}
|
||||
|
||||
textRole: 'key'
|
||||
|
||||
onActivated: SettingsModel.videoPreset = presets.get(index).value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoSizeLabel')
|
||||
|
||||
ComboBox {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
FormGroup {
|
||||
label: qsTr('videoFramerateLabel')
|
||||
|
||||
NumericField {
|
||||
maxValue: 60
|
||||
minValue: 1
|
||||
readOnly: SettingsModel.videoPreset !== 'custom'
|
||||
text: SettingsModel.videoFramerate
|
||||
|
||||
onEditingFinished: SettingsModel.videoFramerate = text
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoPresetLabel')
|
||||
// -------------------------------------------------------------------------
|
||||
// Video Codecs.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
ComboBox {
|
||||
currentIndex: {
|
||||
var preset = SettingsModel.videoPreset
|
||||
Form {
|
||||
title: qsTr('videoCodecsTitle')
|
||||
width: parent.width
|
||||
|
||||
return Number(Utils.findIndex([ 'default', 'high-fps', 'custom' ], function (value) {
|
||||
return preset === value
|
||||
}))
|
||||
}
|
||||
|
||||
model: ListModel {
|
||||
id: presets
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetDefault')
|
||||
value: 'default'
|
||||
}
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetHighFps')
|
||||
value: 'high-fps'
|
||||
}
|
||||
|
||||
ListElement {
|
||||
key: qsTr('presetCustom')
|
||||
value: 'custom'
|
||||
}
|
||||
}
|
||||
|
||||
textRole: 'key'
|
||||
|
||||
onActivated: SettingsModel.videoPreset = presets.get(index).value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('videoSizeLabel')
|
||||
|
||||
ComboBox {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
FormGroup {
|
||||
label: qsTr('videoFramerateLabel')
|
||||
|
||||
NumericField {
|
||||
maxValue: 60
|
||||
minValue: 1
|
||||
readOnly: SettingsModel.videoPreset !== 'custom'
|
||||
text: SettingsModel.videoFramerate
|
||||
|
||||
onEditingFinished: SettingsModel.videoFramerate = text
|
||||
}
|
||||
CodecsViewer {
|
||||
model: VideoCodecsModel
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue