From 94cbdbcc0ff8d52c03232f764ab4ef7624e460a7 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Wed, 23 Oct 2024 14:22:49 +0200 Subject: [PATCH] put components in files --- Linphone/view/CMakeLists.txt | 3 + .../Control/Display/Call/CallStatistics.qml | 143 +++++ Linphone/view/Control/Display/Flickable.qml | 10 + .../Control/Form/Call/ChangeLayoutForm.qml | 74 +++ .../Form/Settings/EncryptionSettings.qml | 99 ++++ .../view/Page/Main/Call/CallSettingsPanel.qml | 5 +- .../view/Page/Window/Call/CallsWindow.qml | 496 ++++-------------- 7 files changed, 435 insertions(+), 395 deletions(-) create mode 100644 Linphone/view/Control/Display/Call/CallStatistics.qml create mode 100644 Linphone/view/Control/Display/Flickable.qml create mode 100644 Linphone/view/Control/Form/Call/ChangeLayoutForm.qml create mode 100644 Linphone/view/Control/Form/Settings/EncryptionSettings.qml diff --git a/Linphone/view/CMakeLists.txt b/Linphone/view/CMakeLists.txt index cf64c2982..22f4368c7 100644 --- a/Linphone/view/CMakeLists.txt +++ b/Linphone/view/CMakeLists.txt @@ -41,6 +41,7 @@ list(APPEND _LINPHONEAPP_QML_FILES view/Control/Display/Text.qml view/Control/Display/ToolTip.qml view/Control/Display/Call/CallListView.qml + view/Control/Display/Call/CallStatistics.qml view/Control/Display/Contact/Avatar.qml view/Control/Display/Contact/Contact.qml view/Control/Display/Contact/ContactListView.qml @@ -51,6 +52,8 @@ list(APPEND _LINPHONEAPP_QML_FILES view/Control/Display/Settings/SettingsMenuItem.qml view/Control/Form/Login/LoginForm.qml + view/Control/Form/Call/ChangeLayoutForm.qml + view/Control/Form/Settings/EncryptionSettings.qml view/Control/Form/Settings/MultimediaSettings.qml view/Control/Form/Settings/ScreencastSettings.qml diff --git a/Linphone/view/Control/Display/Call/CallStatistics.qml b/Linphone/view/Control/Display/Call/CallStatistics.qml new file mode 100644 index 000000000..32da1e9d1 --- /dev/null +++ b/Linphone/view/Control/Display/Call/CallStatistics.qml @@ -0,0 +1,143 @@ +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Layouts +import Linphone +import SettingsCpp 1.0 + +ColumnLayout { + id: mainItem + property var call + property string objectName: "statsPanel" + spacing: 20 * DefaultStyle.dp + + RoundedPane { + Layout.fillWidth: true + leftPadding: 16 * DefaultStyle.dp + rightPadding: 16 * DefaultStyle.dp + topPadding: 13 * DefaultStyle.dp + bottomPadding: 13 * DefaultStyle.dp + + Layout.topMargin: 13 * DefaultStyle.dp + Layout.leftMargin: 16 * DefaultStyle.dp + Layout.rightMargin: 16 * DefaultStyle.dp + + contentItem: ColumnLayout { + spacing: 12 * DefaultStyle.dp + Layout.alignment: Qt.AlignHCenter + Text { + text: qsTr("Audio") + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 700 * DefaultStyle.dp + } + } + ColumnLayout { + spacing: 8 * DefaultStyle.dp + Layout.alignment: Qt.AlignHCenter + Text { + text: mainItem.call ? mainItem.call.core.audioStats.codec : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.audioStats.bandwidth : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.audioStats.lossRate : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.audioStats.jitterBufferSize : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + } + } + } + RoundedPane { + Layout.fillWidth: true + leftPadding: 16 * DefaultStyle.dp + rightPadding: 16 * DefaultStyle.dp + topPadding: 13 * DefaultStyle.dp + bottomPadding: 13 * DefaultStyle.dp + + Layout.leftMargin: 16 * DefaultStyle.dp + Layout.rightMargin: 16 * DefaultStyle.dp + + visible: mainItem.localVideoEnabled || mainItem.remoteVideoEnabled + + contentItem: ColumnLayout { + spacing: 12 * DefaultStyle.dp + Layout.alignment: Qt.AlignHCenter + Text { + text: qsTr("Vidéo") + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 700 * DefaultStyle.dp + } + } + ColumnLayout { + spacing: 8 * DefaultStyle.dp + Layout.alignment: Qt.AlignHCenter + Text { + text: mainItem.call ? mainItem.call.core.videoStats.codec : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.videoStats.bandwidth : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.videoStats.lossRate : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.videoStats.resolution : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: mainItem.call ? mainItem.call.core.videoStats.fps : "" + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + } + } + } + Item{Layout.fillHeight: true} +} \ No newline at end of file diff --git a/Linphone/view/Control/Display/Flickable.qml b/Linphone/view/Control/Display/Flickable.qml new file mode 100644 index 000000000..44d1c1045 --- /dev/null +++ b/Linphone/view/Control/Display/Flickable.qml @@ -0,0 +1,10 @@ +import QtQuick +import Linphone + +Flickable { + width: contentWidth + contentWidth: contentItem.childrenRect.width + contentHeight: contentItem.childrenRect.height + clip: true + flickableDirection: Flickable.VerticalFlick +} \ No newline at end of file diff --git a/Linphone/view/Control/Form/Call/ChangeLayoutForm.qml b/Linphone/view/Control/Form/Call/ChangeLayoutForm.qml new file mode 100644 index 000000000..d10ac6684 --- /dev/null +++ b/Linphone/view/Control/Form/Call/ChangeLayoutForm.qml @@ -0,0 +1,74 @@ +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Layouts +import Linphone +import SettingsCpp 1.0 + +FocusScope { + id: mainItem + property var call + property int conferenceLayout: call && call.core.conferenceVideoLayout || 0 + signal changeLayoutRequested(int index) + + ColumnLayout { + anchors.fill: parent + anchors.topMargin: 16 * DefaultStyle.dp + anchors.bottomMargin: 16 * DefaultStyle.dp + anchors.leftMargin: 17 * DefaultStyle.dp + anchors.rightMargin: 17 * DefaultStyle.dp + spacing: 12 * DefaultStyle.dp + Text { + Layout.fillWidth: true + text: qsTr("La disposition choisie sera enregistrée pour vos prochaines réunions") + font.pixelSize: 14 * DefaultStyle.dp + color: DefaultStyle.main2_500main + } + RoundedPane { + Layout.fillWidth: true + contentItem: ColumnLayout { + spacing: 0 + Repeater { + model: [ + {text: qsTr("Mosaïque"), imgUrl: AppIcons.squaresFour}, + {text: qsTr("Intervenant actif"), imgUrl: AppIcons.pip}, + {text: qsTr("Audio seulement"), imgUrl: AppIcons.waveform} + ] + RadioButton { + id: radiobutton + checkOnClick: false + color: DefaultStyle.main1_500_main + indicatorSize: 20 * DefaultStyle.dp + leftPadding: indicator.width + spacing + spacing: 8 * DefaultStyle.dp + checkable: false // Qt Documentation is wrong: It is true by default. We don't want to change the checked state if the layout change is not effective. + checked: index == 0 + ? mainItem.conferenceLayout === LinphoneEnums.ConferenceLayout.Grid + : index == 1 + ? mainItem.conferenceLayout === LinphoneEnums.ConferenceLayout.ActiveSpeaker + : mainItem.conferenceLayout === LinphoneEnums.ConferenceLayout.AudioOnly + onClicked: mainItem.changeLayoutRequested(index) + + contentItem: RowLayout { + spacing: 5 * DefaultStyle.dp + EffectImage { + id: radioButtonImg + Layout.preferredWidth: 32 * DefaultStyle.dp + Layout.preferredHeight: 32 * DefaultStyle.dp + imageSource: modelData.imgUrl + colorizationColor: DefaultStyle.main2_500main + } + Text { + text: modelData.text + color: DefaultStyle.main2_500main + verticalAlignment: Text.AlignVCenter + font.pixelSize: 14 * DefaultStyle.dp + Layout.fillWidth: true + } + } + } + } + } + } + Item {Layout.fillHeight: true} + } +} \ No newline at end of file diff --git a/Linphone/view/Control/Form/Settings/EncryptionSettings.qml b/Linphone/view/Control/Form/Settings/EncryptionSettings.qml new file mode 100644 index 000000000..e04240bad --- /dev/null +++ b/Linphone/view/Control/Form/Settings/EncryptionSettings.qml @@ -0,0 +1,99 @@ +import QtQuick +import QtQuick.Controls.Basic as Control +import QtQuick.Layouts +import Linphone +import SettingsCpp 1.0 + +ColumnLayout { + id: mainItem + signal encryptionValidationRequested() + property var call + RoundedPane { + Layout.fillWidth: true + leftPadding: 16 * DefaultStyle.dp + rightPadding: 16 * DefaultStyle.dp + topPadding: 13 * DefaultStyle.dp + bottomPadding: 13 * DefaultStyle.dp + contentItem: ColumnLayout { + spacing: 12 * DefaultStyle.dp + Text { + text: qsTr("Chiffrement :") + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 700 * DefaultStyle.dp + } + } + ColumnLayout { + Layout.alignment: Qt.AlignHCenter + spacing: 7 * DefaultStyle.dp + Text { + property bool isPostQuantum: mainItem.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp && mainItem.call.core.zrtpStats.isPostQuantum + text: qsTr("Chiffrement du média : %1%2").arg(isPostQuantum ? "post Quantum " : "").arg(mainItem.call.core.encryptionString) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + ColumnLayout { + visible: mainItem.call && mainItem.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp + Text { + text: qsTr("Cipher algorithm : %1").arg(mainItem.call && mainItem.call.core.zrtpStats.cipherAlgo) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: qsTr("Key agreement algorithm : %1").arg(mainItem.call && mainItem.call.core.zrtpStats.keyAgreementAlgo) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: qsTr("Hash algorithm : %1").arg(mainItem.call && mainItem.call.core.zrtpStats.hashAlgo) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: qsTr("Authentication algorithm : %1").arg(mainItem.call && mainItem.call.core.zrtpStats.authenticationAlgo) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + Text { + text: qsTr("SAS algorithm : %1").arg(mainItem.call && mainItem.call.core.zrtpStats.sasAlgo) + Layout.alignment: Qt.AlignHCenter + font { + pixelSize: 12 * DefaultStyle.dp + weight: 500 * DefaultStyle.dp + } + } + } + } + } + } + Item{Layout.fillHeight: true} + Button { + visible: mainItem.call && !mainItem.call.core.conference && mainItem.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp + Layout.fillWidth: true + text: qsTr("Validation chiffrement") + onClicked: mainItem.encryptionValidationRequested() + Layout.bottomMargin: 13 * DefaultStyle.dp + Layout.leftMargin: 16 * DefaultStyle.dp + Layout.rightMargin: 16 * DefaultStyle.dp + leftPadding: 20 * DefaultStyle.dp + rightPadding: 20 * DefaultStyle.dp + topPadding: 11 * DefaultStyle.dp + bottomPadding: 11 * DefaultStyle.dp + } +} \ No newline at end of file diff --git a/Linphone/view/Page/Main/Call/CallSettingsPanel.qml b/Linphone/view/Page/Main/Call/CallSettingsPanel.qml index c9435ca60..52e851e2a 100644 --- a/Linphone/view/Page/Main/Call/CallSettingsPanel.qml +++ b/Linphone/view/Page/Main/Call/CallSettingsPanel.qml @@ -17,8 +17,9 @@ Control.Page { signal returnRequested() signal validateRequested() - topPadding: 16 * DefaultStyle.dp - // bottomPadding: 16 * DefaultStyle.dp + topPadding: 20 * DefaultStyle.dp + leftPadding: 17 * DefaultStyle.dp + rightPadding: 17 * DefaultStyle.dp background: Rectangle { width: mainItem.width diff --git a/Linphone/view/Page/Window/Call/CallsWindow.qml b/Linphone/view/Page/Window/Call/CallsWindow.qml index 696f8666f..b39e2629e 100644 --- a/Linphone/view/Page/Window/Call/CallsWindow.qml +++ b/Linphone/view/Page/Window/Call/CallsWindow.qml @@ -541,13 +541,22 @@ AbstractWindow { headerStack.currentIndex: 0 contentStackView.initialItem: callsListPanel headerValidateButtonText: qsTr("Ajouter") + + Item { + id: numericPadContainer + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + height: childrenRect.height + } } } Component { - id: contactsListPanel - Item { + id: callTransferPanel + NewCallForm { + id: newCallForm Control.StackView.onActivated: rightPanel.headerTitleText = qsTr("Transférer %1 à :").arg(mainWindow.call.core.remoteName) Keys.onPressed: (event)=> { if (event.key == Qt.Key_Escape) { @@ -555,69 +564,58 @@ AbstractWindow { event.accepted = true; } } - NewCallForm { - id: newCallForm - anchors.fill: parent - anchors.topMargin: 21 * DefaultStyle.dp - anchors.leftMargin: 16 * DefaultStyle.dp - anchors.rightMargin: 16 * DefaultStyle.dp - groupCallVisible: false - displayCurrentCalls: true - searchBarColor: DefaultStyle.grey_0 - searchBarBorderColor: DefaultStyle.grey_200 - onContactClicked: (contact) => { - var callsWin = UtilsCpp.getCallsWindow() - if (contact) callsWin.showConfirmationLambdaPopup( - qsTr("Confirmer le transfert ?"), - qsTr("Vous allez transférer %1 à %2.").arg(mainWindow.call.core.remoteName).arg(contact.core.displayName), - "", - function (confirmed) { - if (confirmed) { - mainWindow.transferCallToContact(mainWindow.call, contact, newCallForm) - } + groupCallVisible: false + displayCurrentCalls: true + searchBarColor: DefaultStyle.grey_0 + searchBarBorderColor: DefaultStyle.grey_200 + onContactClicked: (contact) => { + var callsWin = UtilsCpp.getCallsWindow() + if (contact) callsWin.showConfirmationLambdaPopup( + qsTr("Confirmer le transfert ?"), + qsTr("Vous allez transférer %1 à %2.").arg(mainWindow.call.core.remoteName).arg(contact.core.displayName), + "", + function (confirmed) { + if (confirmed) { + mainWindow.transferCallToContact(mainWindow.call, contact, newCallForm) } - ) - } - onTransferCallToAnotherRequested: (dest) => { - var callsWin = UtilsCpp.getCallsWindow() - console.log("transfer to", dest) - callsWin.showConfirmationLambdaPopup( - qsTr("Confirmer le transfert ?"), - qsTr("Vous allez transférer %1 à %2.").arg(mainWindow.call.core.remoteName).arg(dest.core.remoteName), - "", - function (confirmed) { - if (confirmed) { - mainWindow.call.core.lTransferCallToAnother(dest.core.remoteAddress) - } - } - ) - } - numPadPopup: numPadPopup - Binding { - target: numPadPopup - property: "visible" - value: true - when: newCallForm.searchBar.numericPadButton.checked - restoreMode: Binding.RestoreValue - } - - Item { - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: 402 * DefaultStyle.dp - NumericPadPopup { - id: numPadPopup - width: parent.width - roundedBottom: true - lastRowVisible: false - visible: false - leftPadding: 40 * DefaultStyle.dp - rightPadding: 40 * DefaultStyle.dp - topPadding: 41 * DefaultStyle.dp - bottomPadding: 18 * DefaultStyle.dp } - } + ) + } + onTransferCallToAnotherRequested: (dest) => { + var callsWin = UtilsCpp.getCallsWindow() + console.log("transfer to", dest) + callsWin.showConfirmationLambdaPopup( + qsTr("Confirmer le transfert ?"), + qsTr("Vous allez transférer %1 à %2.").arg(mainWindow.call.core.remoteName).arg(dest.core.remoteName), + "", + function (confirmed) { + if (confirmed) { + mainWindow.call.core.lTransferCallToAnother(dest.core.remoteAddress) + } + } + ) + } + numPadPopup: numPadPopup + Binding { + target: numPadPopup + property: "visible" + value: true + when: newCallForm.searchBar.numericPadButton.checked + restoreMode: Binding.RestoreValue + } + + NumericPadPopup { + id: numPadPopup + parent: numericPadContainer + width: parent.width + roundedBottom: true + lastRowVisible: false + visible: false + leftPadding: 40 * DefaultStyle.dp + rightPadding: 40 * DefaultStyle.dp + topPadding: 41 * DefaultStyle.dp + bottomPadding: 18 * DefaultStyle.dp + Component.onCompleted: parent.height = height } } } @@ -627,10 +625,6 @@ AbstractWindow { id: newCallForm objectName: "newCallPanel" Control.StackView.onActivated: rightPanel.headerTitleText = qsTr("Nouvel appel") - anchors.fill: parent - anchors.topMargin: 21 * DefaultStyle.dp - anchors.leftMargin: 16 * DefaultStyle.dp - anchors.rightMargin: 16 * DefaultStyle.dp groupCallVisible: false searchBarColor: DefaultStyle.grey_0 searchBarBorderColor: DefaultStyle.grey_200 @@ -639,30 +633,27 @@ AbstractWindow { mainWindow.startCallWithContact(contact, false, rightPanel) } - Item { - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: 402 * DefaultStyle.dp - NumericPadPopup { - id: numericPad - width: parent.width - roundedBottom: true - visible: newCallForm.searchBar.numericPadButton.checked - leftPadding: 40 * DefaultStyle.dp - rightPadding: 40 * DefaultStyle.dp - topPadding: 41 * DefaultStyle.dp - bottomPadding: 18 * DefaultStyle.dp - onLaunchCall: { - UtilsCpp.createCall(newCallForm.searchBar.text) - } + NumericPadPopup { + id: numericPad + width: parent.width + parent: numericPadContainer + roundedBottom: true + visible: newCallForm.searchBar.numericPadButton.checked + leftPadding: 40 * DefaultStyle.dp + rightPadding: 40 * DefaultStyle.dp + topPadding: 41 * DefaultStyle.dp + bottomPadding: 18 * DefaultStyle.dp + onLaunchCall: { + UtilsCpp.createCall(newCallForm.searchBar.text) } + Component.onCompleted: parent.height = height } } } Component { id: dialerPanel ColumnLayout { + id: dialerPanelContent Control.StackView.onActivated: rightPanel.headerTitleText = qsTr("Dialer") spacing: 0 Keys.onPressed: (event)=> { @@ -688,32 +679,30 @@ AbstractWindow { numericPadButton.visible: false enabled: false } - Item { - Layout.preferredWidth: parent.width - Layout.preferredHeight: numPadPopup.height - Layout.topMargin: 10 * DefaultStyle.dp - NumericPadPopup { - id: numPadPopup - width: parent.width - closeButtonVisible: false - roundedBottom: true - visible: parent.visible - currentCall: callsModel.currentCall - lastRowVisible: false - leftPadding: 40 * DefaultStyle.dp - rightPadding: 40 * DefaultStyle.dp - topPadding: 41 * DefaultStyle.dp - bottomPadding: 18 * DefaultStyle.dp - onLaunchCall: { - UtilsCpp.createCall(dialerTextInput.text) - } + + NumericPadPopup { + id: numPadPopup + width: parent.width + parent: numericPadContainer + closeButtonVisible: false + roundedBottom: true + visible: dialerPanelContent.visible + currentCall: callsModel.currentCall + lastRowVisible: false + leftPadding: 40 * DefaultStyle.dp + rightPadding: 40 * DefaultStyle.dp + topPadding: 41 * DefaultStyle.dp + bottomPadding: 18 * DefaultStyle.dp + onLaunchCall: { + UtilsCpp.createCall(dialerTextInput.text) } + Component.onCompleted: parent.height = height } } } Component { id: changeLayoutPanel - FocusScope { + ChangeLayoutForm { Control.StackView.onActivated: rightPanel.headerTitleText = qsTr("Modifier la disposition") Keys.onPressed: (event)=> { if (event.key == Qt.Key_Escape) { @@ -721,66 +710,9 @@ AbstractWindow { event.accepted = true; } } - ColumnLayout { - anchors.fill: parent - anchors.topMargin: 16 * DefaultStyle.dp - anchors.bottomMargin: 16 * DefaultStyle.dp - anchors.leftMargin: 17 * DefaultStyle.dp - anchors.rightMargin: 17 * DefaultStyle.dp - spacing: 12 * DefaultStyle.dp - Text { - Layout.fillWidth: true - text: qsTr("La disposition choisie sera enregistrée pour vos prochaines réunions") - font.pixelSize: 14 * DefaultStyle.dp - color: DefaultStyle.main2_500main - } - RoundedPane { - Layout.fillWidth: true - contentItem: ColumnLayout { - spacing: 0 - Repeater { - model: [ - {text: qsTr("Mosaïque"), imgUrl: AppIcons.squaresFour}, - {text: qsTr("Intervenant actif"), imgUrl: AppIcons.pip}, - {text: qsTr("Audio seulement"), imgUrl: AppIcons.waveform} - ] - RadioButton { - id: radiobutton - checkOnClick: false - color: DefaultStyle.main1_500_main - indicatorSize: 20 * DefaultStyle.dp - leftPadding: indicator.width + spacing - spacing: 8 * DefaultStyle.dp - checkable: false // Qt Documentation is wrong: It is true by default. We don't want to change the checked state if the layout change is not effective. - checked: index == 0 - ? mainWindow.conferenceLayout === LinphoneEnums.ConferenceLayout.Grid - : index == 1 - ? mainWindow.conferenceLayout === LinphoneEnums.ConferenceLayout.ActiveSpeaker - : mainWindow.conferenceLayout === LinphoneEnums.ConferenceLayout.AudioOnly - onClicked: mainWindow.changeLayout(index) - - contentItem: RowLayout { - spacing: 5 * DefaultStyle.dp - EffectImage { - id: radioButtonImg - Layout.preferredWidth: 32 * DefaultStyle.dp - Layout.preferredHeight: 32 * DefaultStyle.dp - imageSource: modelData.imgUrl - colorizationColor: DefaultStyle.main2_500main - } - Text { - text: modelData.text - color: DefaultStyle.main2_500main - verticalAlignment: Text.AlignVCenter - font.pixelSize: 14 * DefaultStyle.dp - Layout.fillWidth: true - } - } - } - } - } - } - Item {Layout.fillHeight: true} + call: mainWindow.call + onChangeLayoutRequested: (index) => { + mainWindow.changeLayout(index) } } } @@ -997,243 +929,21 @@ AbstractWindow { } Component { id: encryptionPanel - ColumnLayout { + EncryptionSettings { + call: mainWindow.call Control.StackView.onActivated: { rightPanel.headerTitleText = qsTr("Chiffrement") } - RoundedPane { - Layout.fillWidth: true - leftPadding: 16 * DefaultStyle.dp - rightPadding: 16 * DefaultStyle.dp - topPadding: 13 * DefaultStyle.dp - bottomPadding: 13 * DefaultStyle.dp - - Layout.topMargin: 13 * DefaultStyle.dp - Layout.leftMargin: 16 * DefaultStyle.dp - Layout.rightMargin: 16 * DefaultStyle.dp - - contentItem: ColumnLayout { - spacing: 12 * DefaultStyle.dp - Text { - text: qsTr("Chiffrement :") - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 700 * DefaultStyle.dp - } - } - ColumnLayout { - Layout.alignment: Qt.AlignHCenter - spacing: 7 * DefaultStyle.dp - Text { - property bool isPostQuantum: mainWindow.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp && mainWindow.call.core.zrtpStats.isPostQuantum - text: qsTr("Chiffrement du média : %1%2").arg(isPostQuantum ? "post Quantum " : "").arg(mainWindow.call.core.encryptionString) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - ColumnLayout { - visible: mainWindow.call && mainWindow.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp - Text { - text: qsTr("Cipher algorithm : %1").arg(mainWindow.call && mainWindow.call.core.zrtpStats.cipherAlgo) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: qsTr("Key agreement algorithm : %1").arg(mainWindow.call && mainWindow.call.core.zrtpStats.keyAgreementAlgo) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: qsTr("Hash algorithm : %1").arg(mainWindow.call && mainWindow.call.core.zrtpStats.hashAlgo) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: qsTr("Authentication algorithm : %1").arg(mainWindow.call && mainWindow.call.core.zrtpStats.authenticationAlgo) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: qsTr("SAS algorithm : %1").arg(mainWindow.call && mainWindow.call.core.zrtpStats.sasAlgo) - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - } - } - } - } - Item{Layout.fillHeight: true} - Button { - visible: mainWindow.call && mainWindow.call.core.encryption === LinphoneEnums.MediaEncryption.Zrtp - Layout.fillWidth: true - text: qsTr("Validation chiffrement") - onClicked: zrtpValidation.open() - Layout.bottomMargin: 13 * DefaultStyle.dp - Layout.leftMargin: 16 * DefaultStyle.dp - Layout.rightMargin: 16 * DefaultStyle.dp - leftPadding: 20 * DefaultStyle.dp - rightPadding: 20 * DefaultStyle.dp - topPadding: 11 * DefaultStyle.dp - bottomPadding: 11 * DefaultStyle.dp - } + onEncryptionValidationRequested: zrtpValidation.open() } } Component { id: statsPanel - ColumnLayout { - property string objectName: "statsPanel" - spacing: 20 * DefaultStyle.dp + CallStatistics { Control.StackView.onActivated: { rightPanel.headerTitleText = qsTr("Statistiques") } - RoundedPane { - Layout.fillWidth: true - leftPadding: 16 * DefaultStyle.dp - rightPadding: 16 * DefaultStyle.dp - topPadding: 13 * DefaultStyle.dp - bottomPadding: 13 * DefaultStyle.dp - - Layout.topMargin: 13 * DefaultStyle.dp - Layout.leftMargin: 16 * DefaultStyle.dp - Layout.rightMargin: 16 * DefaultStyle.dp - - contentItem: ColumnLayout { - spacing: 12 * DefaultStyle.dp - Layout.alignment: Qt.AlignHCenter - Text { - text: qsTr("Audio") - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 700 * DefaultStyle.dp - } - } - ColumnLayout { - spacing: 8 * DefaultStyle.dp - Layout.alignment: Qt.AlignHCenter - Text { - text: mainWindow.call ? mainWindow.call.core.audioStats.codec : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.audioStats.bandwidth : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.audioStats.lossRate : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.audioStats.jitterBufferSize : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - } - } - } - RoundedPane { - Layout.fillWidth: true - leftPadding: 16 * DefaultStyle.dp - rightPadding: 16 * DefaultStyle.dp - topPadding: 13 * DefaultStyle.dp - bottomPadding: 13 * DefaultStyle.dp - - Layout.leftMargin: 16 * DefaultStyle.dp - Layout.rightMargin: 16 * DefaultStyle.dp - - visible: mainWindow.localVideoEnabled || mainWindow.remoteVideoEnabled - - contentItem: ColumnLayout { - spacing: 12 * DefaultStyle.dp - Layout.alignment: Qt.AlignHCenter - Text { - text: qsTr("Vidéo") - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 700 * DefaultStyle.dp - } - } - ColumnLayout { - spacing: 8 * DefaultStyle.dp - Layout.alignment: Qt.AlignHCenter - Text { - text: mainWindow.call ? mainWindow.call.core.videoStats.codec : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.videoStats.bandwidth : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.videoStats.lossRate : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.videoStats.resolution : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - Text { - text: mainWindow.call ? mainWindow.call.core.videoStats.fps : "" - Layout.alignment: Qt.AlignHCenter - font { - pixelSize: 12 * DefaultStyle.dp - weight: 500 * DefaultStyle.dp - } - } - } - } - } - Item{Layout.fillHeight: true} + call: mainWindow.call } } Component { @@ -1402,7 +1112,7 @@ AbstractWindow { onCheckedChanged: { if (checked) { rightPanel.visible = true - rightPanel.replace(contactsListPanel) + rightPanel.replace(callTransferPanel) } else { rightPanel.visible = false } @@ -1420,7 +1130,7 @@ AbstractWindow { Layout.preferredHeight: 55 * DefaultStyle.dp icon.width: 32 * DefaultStyle.dp icon.height: 32 * DefaultStyle.dp - checked: rightPanel.visible && rightPanel.currentItem.objectName === "newCallPanel" + checked: rightPanel.visible && rightPanel.currentItem ? rightPanel.currentItem.objectName === "newCallPanel" : false onCheckedChanged: { if (checked) { rightPanel.visible = true