From a9c7e1f8cc892dc37a50caeb4b17fd093371cc87 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Tue, 17 Feb 2026 10:54:49 +0100 Subject: [PATCH] UI fixes: fix initials function fix translation and text weight warnings fix meeting detail layout fix crash when adding invalid participant to conference cancel button on conference update loading popup --- .gitlab-ci-files/windows-desktop.yml | 1 - .../core/conference/ConferenceInfoCore.cpp | 6 +- Linphone/tool/Utils.cpp | 22 +- .../view/Control/Button/IconLabelButton.qml | 2 +- Linphone/view/Control/Container/Section.qml | 1 - .../view/Page/Main/Meeting/MeetingPage.qml | 490 +++++++++--------- 6 files changed, 266 insertions(+), 256 deletions(-) diff --git a/.gitlab-ci-files/windows-desktop.yml b/.gitlab-ci-files/windows-desktop.yml index 30f9d47e1..1854c3e25 100644 --- a/.gitlab-ci-files/windows-desktop.yml +++ b/.gitlab-ci-files/windows-desktop.yml @@ -181,7 +181,6 @@ win64-ninja-vs2022-scheduled-windows: rules: - !reference [.rules-merge-request-manual, rules] - if: $NIGHTLY_RELEASE - - if: $NIGHTLY_MASTER - if: $PACKAGE_WINDOWS variables: CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_BUGSPLAT_SYMBOLS_UPLOAD=ON -DBUGSPLAT_CLIENT_ID=$BUGSPLAT_CLIENT_ID -DBUGSPLAT_CLIENT_SECRET=$BUGSPLAT_CLIENT_SECRET -DBUGSPLAT_DATABASE=$BUGSPLAT_DATABASE diff --git a/Linphone/core/conference/ConferenceInfoCore.cpp b/Linphone/core/conference/ConferenceInfoCore.cpp index 6cbed6a23..ab7b58141 100644 --- a/Linphone/core/conference/ConferenceInfoCore.cpp +++ b/Linphone/core/conference/ConferenceInfoCore.cpp @@ -551,8 +551,10 @@ void ConferenceInfoCore::writeIntoModel(std::shared_ptr mod auto map = p.toMap(); auto address = map["address"].toString(); auto linAddr = ToolModel::interpretUrl(address); - auto infos = linphone::Factory::get()->createParticipantInfo(linAddr); - participantInfos.push_back(infos); + if (linAddr) { + auto infos = linphone::Factory::get()->createParticipantInfo(linAddr); + participantInfos.push_back(infos); + } } model->setParticipantInfos(participantInfos); } diff --git a/Linphone/tool/Utils.cpp b/Linphone/tool/Utils.cpp index 3a9b765d7..d518176fd 100644 --- a/Linphone/tool/Utils.cpp +++ b/Linphone/tool/Utils.cpp @@ -141,21 +141,23 @@ QString Utils::getInitials(const QString &username, int letterCount) { #if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) return Utils::encodeEmojiToQmlRichFormat(QString::fromStdU32String(char32)); #else - QString::fromStdU32String(char32); + return QString::fromStdU32String(char32); #endif } QStringList initials; initials << QString::fromStdU32String(char32); - for (int i = 1; i < words.size() && initials.size() <= 1; ++i) { - if (words[i].size() > 0) { - str32 = words[i].toStdU32String(); - char32[0] = str32[0]; - initials << QString::fromStdU32String(char32); - if (initials.count() >= letterCount) break; - std::string converted = u32_to_ascii(char32); - if (Utils::codepointIsEmoji(atoi(converted.c_str()))) { - break; + if (initials.count() < letterCount) { + for (int i = 1; i < words.size() && initials.size() <= 1; ++i) { + if (words[i].size() > 0) { + str32 = words[i].toStdU32String(); + char32[0] = str32[0]; + initials << QString::fromStdU32String(char32); + if (initials.count() >= letterCount) break; + std::string converted = u32_to_ascii(char32); + if (Utils::codepointIsEmoji(atoi(converted.c_str()))) { + break; + } } } } diff --git a/Linphone/view/Control/Button/IconLabelButton.qml b/Linphone/view/Control/Button/IconLabelButton.qml index fbe322714..0b8d6189d 100644 --- a/Linphone/view/Control/Button/IconLabelButton.qml +++ b/Linphone/view/Control/Button/IconLabelButton.qml @@ -60,7 +60,7 @@ Button { text: mainItem.text font { pixelSize: mainItem.textSize - weight: mainItem.textWeight * 2 + weight: mainItem.textWeight family: DefaultStyle.defaultFont capitalization: mainItem.capitalization underline: mainItem.underline diff --git a/Linphone/view/Control/Container/Section.qml b/Linphone/view/Control/Container/Section.qml index 87ddf3e23..55763f98d 100644 --- a/Linphone/view/Control/Container/Section.qml +++ b/Linphone/view/Control/Container/Section.qml @@ -12,7 +12,6 @@ ColumnLayout { spacing: Utils.getSizeWithScreenRatio(15) property alias content: contentLayout.data property alias contentLayout: contentLayout - implicitHeight: contentLayout.implicitHeight + Utils.getSizeWithScreenRatio(1) + spacing ColumnLayout { id: contentLayout spacing: Utils.getSizeWithScreenRatio(8) diff --git a/Linphone/view/Page/Main/Meeting/MeetingPage.qml b/Linphone/view/Page/Main/Meeting/MeetingPage.qml index e99255e09..98edc7a3c 100644 --- a/Linphone/view/Page/Main/Meeting/MeetingPage.qml +++ b/Linphone/view/Page/Main/Meeting/MeetingPage.qml @@ -499,17 +499,17 @@ AbstractMainPage { } } Connections { - enabled: conferenceEdit.conferenceInfoGui + enabled: conferenceEdit && conferenceEdit.conferenceInfoGui target: conferenceEdit.conferenceInfoGui ? conferenceEdit.conferenceInfoGui.core : null ignoreUnknownSignals: true function onSaveFailed() { UtilsCpp.getMainWindow().closeLoadingPopup() } function onSchedulerStateChanged() { - editFocusScope.enabled = conferenceInfoGui.core.schedulerState != LinphoneEnums.ConferenceSchedulerState.AllocationPending + editFocusScope.enabled = conferenceEdit.conferenceInfoGui.core.schedulerState != LinphoneEnums.ConferenceSchedulerState.AllocationPending if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Ready) { - rightPanelStackView.pop() UtilsCpp.getMainWindow().closeLoadingPopup() + rightPanelStackView.pop() //: "Enregistré" UtilsCpp.showInformationPopup(qsTr("saved"), //: "Réunion mise à jour" @@ -518,7 +518,9 @@ AbstractMainPage { else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.AllocationPending || conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Updating) { //: "Modification de la réunion en cours…" - UtilsCpp.getMainWindow().showLoadingPopup(qsTr("meeting_schedule_edit_in_progress")) + UtilsCpp.getMainWindow().showLoadingPopup(qsTr("meeting_schedule_edit_in_progress"), true, function(){ + conferenceEdit.conferenceInfoGui.core.undo() + }) } else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Error) { UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"), //: "Échec de la modification de la réunion !" @@ -621,7 +623,7 @@ AbstractMainPage { FocusScope{ width: Utils.getSizeWithScreenRatio(393) anchors.horizontalCenter: parent?.horizontalCenter - RowLayout { + ColumnLayout { id: meetingDetailsLayout visible: mainItem.selectedConference anchors.top: parent.top @@ -629,146 +631,188 @@ AbstractMainPage { anchors.horizontalCenter: parent.horizontalCenter anchors.bottomMargin: Utils.getSizeWithScreenRatio(30) width: Utils.getSizeWithScreenRatio(393) + uniformCellSizes: true // direction: FlexboxLayout.Column // alignContent: FlexboxLayout.AlignSpaceBetween - spacing: Utils.getSizeWithScreenRatio(16) - Section { - visible: mainItem.selectedConference - Layout.fillWidth: true - content: RowLayout { - spacing: Utils.getSizeWithScreenRatio(8) - EffectImage { - imageSource: AppIcons.usersThree - colorizationColor: DefaultStyle.main2_600 - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - } - Text { - Layout.fillWidth: true - text: mainItem.selectedConference && mainItem.selectedConference.core? mainItem.selectedConference.core.subject : "" - maximumLineCount: 1 - font { - pixelSize: Utils.getSizeWithScreenRatio(20) - weight: Typography.h4.weight + ColumnLayout{ + Layout.alignment: Qt.AlignTop + spacing: Utils.getSizeWithScreenRatio(16) + Section { + visible: mainItem.selectedConference + Layout.fillWidth: true + content: RowLayout { + spacing: Utils.getSizeWithScreenRatio(8) + EffectImage { + imageSource: AppIcons.usersThree + colorizationColor: DefaultStyle.main2_600 + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) } - } - Item { - Layout.fillWidth: true - } - RoundButton { - id: editButton - property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress) - visible: mainItem.selectedConference && isMeObj && isMeObj.value || false - icon.source: AppIcons.pencil - style: ButtonStyle.noBackgroundOrange - KeyNavigation.left: leftPanelStackView.currentItem - KeyNavigation.right: deletePopup - KeyNavigation.up: joinButton - KeyNavigation.down: shareNetworkButton - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - onClicked: mainItem.editConference(mainItem.selectedConference) - } - PopupButton { - id: deletePopup - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - contentImageColor: DefaultStyle.main1_500_main - KeyNavigation.left: editButton.visible ? editButton : leftPanelStackView.currentItem - KeyNavigation.right: leftPanelStackView.currentItem - KeyNavigation.up: joinButton - KeyNavigation.down: shareNetworkButton - - popup.contentItem: IconLabelButton { - style: ButtonStyle.hoveredBackgroundRed + Text { + Layout.fillWidth: true + text: mainItem.selectedConference && mainItem.selectedConference.core? mainItem.selectedConference.core.subject : "" + maximumLineCount: 1 + font { + pixelSize: Utils.getSizeWithScreenRatio(20) + weight: Typography.h4.weight + } + } + Item { + Layout.fillWidth: true + } + RoundButton { + id: editButton property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress) - property bool canCancel: isMeObj && isMeObj.value && mainItem.selectedConference?.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled - icon.source: AppIcons.trashCan - //: "Supprimer la réunion" - text: qsTr("meeting_info_delete") + visible: mainItem.selectedConference && isMeObj && isMeObj.value || false + icon.source: AppIcons.pencil + style: ButtonStyle.noBackgroundOrange + KeyNavigation.left: leftPanelStackView.currentItem + KeyNavigation.right: deletePopup + KeyNavigation.up: joinButton + KeyNavigation.down: shareNetworkButton + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + onClicked: mainItem.editConference(mainItem.selectedConference) + } + PopupButton { + id: deletePopup + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) + contentImageColor: DefaultStyle.main1_500_main + KeyNavigation.left: editButton.visible ? editButton : leftPanelStackView.currentItem + KeyNavigation.right: leftPanelStackView.currentItem + KeyNavigation.up: joinButton + KeyNavigation.down: shareNetworkButton - onClicked: { - if (mainItem.selectedConference) { - cancelAndDeleteConfDialog.confInfoToDelete = mainItem.selectedConference - cancelAndDeleteConfDialog.cancel = canCancel - cancelAndDeleteConfDialog.open() - deletePopup.close() + popup.contentItem: IconLabelButton { + style: ButtonStyle.hoveredBackgroundRed + property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress) + property bool canCancel: isMeObj && isMeObj.value && mainItem.selectedConference?.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled + icon.source: AppIcons.trashCan + //: "Supprimer la réunion" + text: qsTr("meeting_info_delete") + + onClicked: { + if (mainItem.selectedConference) { + cancelAndDeleteConfDialog.confInfoToDelete = mainItem.selectedConference + cancelAndDeleteConfDialog.cancel = canCancel + cancelAndDeleteConfDialog.open() + deletePopup.close() + } } } } } } - } - Section { - Layout.fillWidth: true - content: ColumnLayout { - spacing: Utils.getSizeWithScreenRatio(15) - width: parent.width - RowLayout { - spacing: Utils.getSizeWithScreenRatio(8) - Layout.fillWidth: true - EffectImage { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - colorizationColor: DefaultStyle.main2_600 - imageSource: AppIcons.videoCamera - } - SmallButton { - id: linkButton + Section { + Layout.fillWidth: true + content: ColumnLayout { + spacing: Utils.getSizeWithScreenRatio(15) + width: parent.width + RowLayout { + spacing: Utils.getSizeWithScreenRatio(8) Layout.fillWidth: true - text: mainItem.selectedConference ? mainItem.selectedConference.core?.uri : "" - textSize: Typography.p1.pixelSize - textWeight: Typography.p1.weight - underline: true - style: ButtonStyle.noBackground - Keys.onPressed: (event)=> { - if (event.key == Qt.Key_Space || event.key == Qt.Key_Enter || event.key == Qt.Key_Return) { - clicked(undefined) - event.accepted = true; + EffectImage { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) + colorizationColor: DefaultStyle.main2_600 + imageSource: AppIcons.videoCamera + } + SmallButton { + id: linkButton + Layout.fillWidth: true + text: mainItem.selectedConference ? mainItem.selectedConference.core?.uri : "" + textSize: Typography.p1.pixelSize + textWeight: Typography.p1.weight + underline: true + style: ButtonStyle.noBackground + Keys.onPressed: (event)=> { + if (event.key == Qt.Key_Space || event.key == Qt.Key_Enter || event.key == Qt.Key_Return) { + clicked(undefined) + event.accepted = true; + } + } + KeyNavigation.left: shareNetworkButton + KeyNavigation.right: shareNetworkButton + KeyNavigation.up: deletePopup + KeyNavigation.down: joinButton + onClicked: { + // TODO : voir si c'est en audio only quand on clique sur le lien + UtilsCpp.createCall(mainItem.selectedConference.core.uri) } } - KeyNavigation.left: shareNetworkButton - KeyNavigation.right: shareNetworkButton - KeyNavigation.up: deletePopup - KeyNavigation.down: joinButton - onClicked: { - // TODO : voir si c'est en audio only quand on clique sur le lien - UtilsCpp.createCall(mainItem.selectedConference.core.uri) + RoundButton { + id: shareNetworkButton + style: ButtonStyle.noBackground + icon.source: AppIcons.shareNetwork + KeyNavigation.left: linkButton + KeyNavigation.right: linkButton + KeyNavigation.up: deletePopup + KeyNavigation.down: joinButton + onClicked: { + var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri) + if (success) UtilsCpp.showInformationPopup(qsTr("saved"), + //: "Adresse de la réunion copiée" + qsTr("meeting_address_copied_to_clipboard_toast")) + } } } - RoundButton { - id: shareNetworkButton - style: ButtonStyle.noBackground - icon.source: AppIcons.shareNetwork - KeyNavigation.left: linkButton - KeyNavigation.right: linkButton - KeyNavigation.up: deletePopup - KeyNavigation.down: calendarPlusButton - onClicked: { - var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri) - if (success) UtilsCpp.showInformationPopup(qsTr("saved"), - //: "Adresse de la réunion copiée" - qsTr("meeting_address_copied_to_clipboard_toast")) + RowLayout { + spacing: Utils.getSizeWithScreenRatio(8) + EffectImage { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) + imageSource: AppIcons.clock + colorizationColor: DefaultStyle.main2_600 + } + Text { + text: mainItem.selectedConference && mainItem.selectedConference.core + ? UtilsCpp.toDateString(mainItem.selectedConference.core.dateTime) + + " | " + UtilsCpp.toDateHourString(mainItem.selectedConference.core.dateTime) + + " - " + + UtilsCpp.toDateHourString(mainItem.selectedConference.core.endDateTime) + : '' + font { + pixelSize: Utils.getSizeWithScreenRatio(14) + capitalization: Font.Capitalize + } + } + } + RowLayout { + spacing: Utils.getSizeWithScreenRatio(8) + EffectImage { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) + imageSource: AppIcons.globe + colorizationColor: DefaultStyle.main2_600 + } + Text { + Layout.fillWidth: true + //: "Fuseau horaire" + text: "%1: %2".arg(qsTr("meeting_schedule_timezone_title")).arg(mainItem.selectedConference && mainItem.selectedConference.core ? (mainItem.selectedConference.core.timeZoneModel.displayName + ", " + mainItem.selectedConference.core.timeZoneModel.countryName) : "") + font { + pixelSize: Utils.getSizeWithScreenRatio(14) + capitalization: Font.Capitalize + } } } } - RowLayout { + } + Section { + Layout.fillWidth: true + visible: mainItem.selectedConference && mainItem.selectedConference.core?.description.length != 0 + content: RowLayout { spacing: Utils.getSizeWithScreenRatio(8) EffectImage { Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - imageSource: AppIcons.clock + imageSource: AppIcons.note colorizationColor: DefaultStyle.main2_600 } Text { - text: mainItem.selectedConference && mainItem.selectedConference.core - ? UtilsCpp.toDateString(mainItem.selectedConference.core.dateTime) - + " | " + UtilsCpp.toDateHourString(mainItem.selectedConference.core.dateTime) - + " - " - + UtilsCpp.toDateHourString(mainItem.selectedConference.core.endDateTime) - : '' + text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.description : "" + Layout.fillWidth: true font { pixelSize: Utils.getSizeWithScreenRatio(14) - capitalization: Font.Capitalize } } RoundButton { @@ -784,18 +828,25 @@ AbstractMainPage { } } } - RowLayout { + } + Section { + Layout.fillWidth: true + content: RowLayout { spacing: Utils.getSizeWithScreenRatio(8) EffectImage { Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - imageSource: AppIcons.globe + imageSource: AppIcons.userRectangle colorizationColor: DefaultStyle.main2_600 } + Avatar { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(45) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(45) + _address: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.organizerAddress : "" + secured: friendSecurityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified + } Text { - Layout.fillWidth: true - //: "Fuseau horaire" - text: "%1: %2".arg(qsTr("meeting_schedule_timezone_title")).arg(mainItem.selectedConference && mainItem.selectedConference.core ? (mainItem.selectedConference.core.timeZoneModel.displayName + ", " + mainItem.selectedConference.core.timeZoneModel.countryName) : "") + text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.organizerName : "" font { pixelSize: Utils.getSizeWithScreenRatio(14) capitalization: Font.Capitalize @@ -803,132 +854,89 @@ AbstractMainPage { } } } - } - Section { - Layout.fillWidth: true - visible: mainItem.selectedConference && mainItem.selectedConference.core?.description.length != 0 - content: RowLayout { - spacing: Utils.getSizeWithScreenRatio(8) - EffectImage { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - imageSource: AppIcons.note - colorizationColor: DefaultStyle.main2_600 - } - Text { - text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.description : "" - Layout.fillWidth: true - font { - pixelSize: Utils.getSizeWithScreenRatio(14) + Section { + visible: participantList.count > 0 + Layout.fillWidth: true + Layout.fillHeight: true + Layout.maximumHeight: participantList.contentHeight + Utils.getSizeWithScreenRatio(1) + spacing + content: + RowLayout { + width: Utils.getSizeWithScreenRatio(393) + spacing: Utils.getSizeWithScreenRatio(8) + EffectImage { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) + Layout.alignment: Qt.AlignLeft | Qt.AlignTop + Layout.topMargin: Utils.getSizeWithScreenRatio(20) + imageSource: AppIcons.usersTwo + colorizationColor: DefaultStyle.main2_600 } - } - } - } - Section { - Layout.fillWidth: true - content: RowLayout { - spacing: Utils.getSizeWithScreenRatio(8) - EffectImage { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - imageSource: AppIcons.userRectangle - colorizationColor: DefaultStyle.main2_600 - } - Avatar { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(45) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(45) - _address: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.organizerAddress : "" - secured: friendSecurityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified - } - Text { - text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.organizerName : "" - font { - pixelSize: Utils.getSizeWithScreenRatio(14) - capitalization: Font.Capitalize - } - } - } - } - Section { - visible: participantList.count > 0 - Layout.fillWidth: true - Layout.fillHeight: true - Layout.maximumHeight: participantList.contentHeight + Utils.getSizeWithScreenRatio(1) + spacing - content: RowLayout { - width: Utils.getSizeWithScreenRatio(393) - spacing: Utils.getSizeWithScreenRatio(8) - EffectImage { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.topMargin: Utils.getSizeWithScreenRatio(20) - imageSource: AppIcons.usersTwo - colorizationColor: DefaultStyle.main2_600 - } - ListView { - id: participantList - // Layout.preferredHeight: contentHeight - Layout.fillWidth: true - Layout.fillHeight: true - model: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.participants : [] - clip: true - Control.ScrollBar.vertical: ScrollBar { - id: participantScrollBar - anchors.right: participantList.right - anchors.top: participantList.top - anchors.bottom: participantList.bottom - visible: participantList.height < participantList.contentHeight - } - delegate: RowLayout { - height: Utils.getSizeWithScreenRatio(56) - width: participantList.width - participantScrollBar.width - Utils.getSizeWithScreenRatio(5) - Avatar { - Layout.preferredWidth: Utils.getSizeWithScreenRatio(45) - Layout.preferredHeight: Utils.getSizeWithScreenRatio(45) - _address: modelData.address - secured: friendSecurityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified - shadowEnabled: false + ListView { + id: participantList + // Layout.preferredHeight: contentHeight + Layout.fillWidth: true + Layout.fillHeight: true + height: contentHeight + model: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.participants : [] + clip: true + Control.ScrollBar.vertical: ScrollBar { + id: participantScrollBar + anchors.right: participantList.right + anchors.top: participantList.top + anchors.bottom: participantList.bottom + visible: participantList.height < participantList.contentHeight } - Text { - property var displayNameObj: UtilsCpp.getDisplayName(modelData.address) - text: displayNameObj?.value || "" - maximumLineCount: 1 - Layout.fillWidth: true - font { - pixelSize: Utils.getSizeWithScreenRatio(14) - capitalization: Font.Capitalize + delegate: RowLayout { + height: Utils.getSizeWithScreenRatio(56) + width: participantList.width - participantScrollBar.width - Utils.getSizeWithScreenRatio(5) + Avatar { + Layout.preferredWidth: Utils.getSizeWithScreenRatio(45) + Layout.preferredHeight: Utils.getSizeWithScreenRatio(45) + _address: modelData.address + secured: friendSecurityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified + shadowEnabled: false } - } - Text { - //: "Organisateur" - text: qsTr("meeting_info_organizer_label") - visible: mainItem.selectedConference && mainItem.selectedConference.core?.organizerAddress === modelData.address - color: DefaultStyle.main2_400 - font { - pixelSize: Utils.getSizeWithScreenRatio(12) - weight: Utils.getSizeWithScreenRatio(300) + Text { + property var displayNameObj: UtilsCpp.getDisplayName(modelData.address) + text: displayNameObj?.value || "" + maximumLineCount: 1 + Layout.fillWidth: true + font { + pixelSize: Utils.getSizeWithScreenRatio(14) + capitalization: Font.Capitalize + } + } + Text { + //: "Organisateur" + text: qsTr("meeting_info_organizer_label") + visible: mainItem.selectedConference && mainItem.selectedConference.core?.organizerAddress === modelData.address + color: DefaultStyle.main2_400 + font { + pixelSize: Utils.getSizeWithScreenRatio(12) + weight: Utils.getSizeWithScreenRatio(300) + } } } } } } - } - BigButton { - id: joinButton - visible: mainItem.selectedConference && mainItem.selectedConference.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled - Layout.fillWidth: true - //: "Rejoindre la réunion" - text: qsTr("meeting_info_join_title") - focus: true - KeyNavigation.up: shareNetworkButton - KeyNavigation.down: deletePopup - KeyNavigation.left: leftPanelStackView.currentItem - KeyNavigation.right: leftPanelStackView.currentItem - onClicked: { - console.log(mainItem.selectedConference.core.uri) - var callsWindow = UtilsCpp.getOrCreateCallsWindow() - callsWindow.setupConference(mainItem.selectedConference) - UtilsCpp.smartShowWindow(callsWindow) + BigButton { + id: joinButton + visible: mainItem.selectedConference && mainItem.selectedConference.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled + Layout.fillWidth: true + //: "Rejoindre la réunion" + text: qsTr("meeting_info_join_title") + focus: true + KeyNavigation.up: shareNetworkButton + KeyNavigation.down: deletePopup + KeyNavigation.left: leftPanelStackView.currentItem + KeyNavigation.right: leftPanelStackView.currentItem + onClicked: { + console.log(mainItem.selectedConference.core.uri) + var callsWindow = UtilsCpp.getOrCreateCallsWindow() + callsWindow.setupConference(mainItem.selectedConference) + UtilsCpp.smartShowWindow(callsWindow) + } } } }