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
This commit is contained in:
Gaelle Braud 2026-02-17 10:54:49 +01:00
parent 1d2eefe729
commit a9c7e1f8cc
6 changed files with 266 additions and 256 deletions

View file

@ -181,7 +181,6 @@ win64-ninja-vs2022-scheduled-windows:
rules: rules:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_RELEASE - if: $NIGHTLY_RELEASE
- if: $NIGHTLY_MASTER
- if: $PACKAGE_WINDOWS - if: $PACKAGE_WINDOWS
variables: 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 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

View file

@ -551,8 +551,10 @@ void ConferenceInfoCore::writeIntoModel(std::shared_ptr<ConferenceInfoModel> mod
auto map = p.toMap(); auto map = p.toMap();
auto address = map["address"].toString(); auto address = map["address"].toString();
auto linAddr = ToolModel::interpretUrl(address); auto linAddr = ToolModel::interpretUrl(address);
auto infos = linphone::Factory::get()->createParticipantInfo(linAddr); if (linAddr) {
participantInfos.push_back(infos); auto infos = linphone::Factory::get()->createParticipantInfo(linAddr);
participantInfos.push_back(infos);
}
} }
model->setParticipantInfos(participantInfos); model->setParticipantInfos(participantInfos);
} }

View file

@ -141,21 +141,23 @@ QString Utils::getInitials(const QString &username, int letterCount) {
#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) #if QT_VERSION < QT_VERSION_CHECK(6, 9, 0)
return Utils::encodeEmojiToQmlRichFormat(QString::fromStdU32String(char32)); return Utils::encodeEmojiToQmlRichFormat(QString::fromStdU32String(char32));
#else #else
QString::fromStdU32String(char32); return QString::fromStdU32String(char32);
#endif #endif
} }
QStringList initials; QStringList initials;
initials << QString::fromStdU32String(char32); initials << QString::fromStdU32String(char32);
for (int i = 1; i < words.size() && initials.size() <= 1; ++i) { if (initials.count() < letterCount) {
if (words[i].size() > 0) { for (int i = 1; i < words.size() && initials.size() <= 1; ++i) {
str32 = words[i].toStdU32String(); if (words[i].size() > 0) {
char32[0] = str32[0]; str32 = words[i].toStdU32String();
initials << QString::fromStdU32String(char32); char32[0] = str32[0];
if (initials.count() >= letterCount) break; initials << QString::fromStdU32String(char32);
std::string converted = u32_to_ascii(char32); if (initials.count() >= letterCount) break;
if (Utils::codepointIsEmoji(atoi(converted.c_str()))) { std::string converted = u32_to_ascii(char32);
break; if (Utils::codepointIsEmoji(atoi(converted.c_str()))) {
break;
}
} }
} }
} }

View file

@ -60,7 +60,7 @@ Button {
text: mainItem.text text: mainItem.text
font { font {
pixelSize: mainItem.textSize pixelSize: mainItem.textSize
weight: mainItem.textWeight * 2 weight: mainItem.textWeight
family: DefaultStyle.defaultFont family: DefaultStyle.defaultFont
capitalization: mainItem.capitalization capitalization: mainItem.capitalization
underline: mainItem.underline underline: mainItem.underline

View file

@ -12,7 +12,6 @@ ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(15) spacing: Utils.getSizeWithScreenRatio(15)
property alias content: contentLayout.data property alias content: contentLayout.data
property alias contentLayout: contentLayout property alias contentLayout: contentLayout
implicitHeight: contentLayout.implicitHeight + Utils.getSizeWithScreenRatio(1) + spacing
ColumnLayout { ColumnLayout {
id: contentLayout id: contentLayout
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)

View file

@ -499,17 +499,17 @@ AbstractMainPage {
} }
} }
Connections { Connections {
enabled: conferenceEdit.conferenceInfoGui enabled: conferenceEdit && conferenceEdit.conferenceInfoGui
target: conferenceEdit.conferenceInfoGui ? conferenceEdit.conferenceInfoGui.core : null target: conferenceEdit.conferenceInfoGui ? conferenceEdit.conferenceInfoGui.core : null
ignoreUnknownSignals: true ignoreUnknownSignals: true
function onSaveFailed() { function onSaveFailed() {
UtilsCpp.getMainWindow().closeLoadingPopup() UtilsCpp.getMainWindow().closeLoadingPopup()
} }
function onSchedulerStateChanged() { 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) { if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Ready) {
rightPanelStackView.pop()
UtilsCpp.getMainWindow().closeLoadingPopup() UtilsCpp.getMainWindow().closeLoadingPopup()
rightPanelStackView.pop()
//: "Enregistré" //: "Enregistré"
UtilsCpp.showInformationPopup(qsTr("saved"), UtilsCpp.showInformationPopup(qsTr("saved"),
//: "Réunion mise à jour" //: "Réunion mise à jour"
@ -518,7 +518,9 @@ AbstractMainPage {
else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.AllocationPending else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.AllocationPending
|| conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Updating) { || conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Updating) {
//: "Modification de la réunion en cours" //: "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) { } else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Error) {
UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"), UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"),
//: "Échec de la modification de la réunion !" //: "Échec de la modification de la réunion !"
@ -621,7 +623,7 @@ AbstractMainPage {
FocusScope{ FocusScope{
width: Utils.getSizeWithScreenRatio(393) width: Utils.getSizeWithScreenRatio(393)
anchors.horizontalCenter: parent?.horizontalCenter anchors.horizontalCenter: parent?.horizontalCenter
RowLayout { ColumnLayout {
id: meetingDetailsLayout id: meetingDetailsLayout
visible: mainItem.selectedConference visible: mainItem.selectedConference
anchors.top: parent.top anchors.top: parent.top
@ -629,146 +631,188 @@ AbstractMainPage {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.bottomMargin: Utils.getSizeWithScreenRatio(30) anchors.bottomMargin: Utils.getSizeWithScreenRatio(30)
width: Utils.getSizeWithScreenRatio(393) width: Utils.getSizeWithScreenRatio(393)
uniformCellSizes: true
// direction: FlexboxLayout.Column // direction: FlexboxLayout.Column
// alignContent: FlexboxLayout.AlignSpaceBetween // alignContent: FlexboxLayout.AlignSpaceBetween
spacing: Utils.getSizeWithScreenRatio(16) ColumnLayout{
Section { Layout.alignment: Qt.AlignTop
visible: mainItem.selectedConference spacing: Utils.getSizeWithScreenRatio(16)
Layout.fillWidth: true Section {
content: RowLayout { visible: mainItem.selectedConference
spacing: Utils.getSizeWithScreenRatio(8) Layout.fillWidth: true
EffectImage { content: RowLayout {
imageSource: AppIcons.usersThree spacing: Utils.getSizeWithScreenRatio(8)
colorizationColor: DefaultStyle.main2_600 EffectImage {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) imageSource: AppIcons.usersThree
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) colorizationColor: DefaultStyle.main2_600
} Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
Text { Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
Layout.fillWidth: true
text: mainItem.selectedConference && mainItem.selectedConference.core? mainItem.selectedConference.core.subject : ""
maximumLineCount: 1
font {
pixelSize: Utils.getSizeWithScreenRatio(20)
weight: Typography.h4.weight
} }
} Text {
Item { Layout.fillWidth: true
Layout.fillWidth: true text: mainItem.selectedConference && mainItem.selectedConference.core? mainItem.selectedConference.core.subject : ""
} maximumLineCount: 1
RoundButton { font {
id: editButton pixelSize: Utils.getSizeWithScreenRatio(20)
property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress) weight: Typography.h4.weight
visible: mainItem.selectedConference && isMeObj && isMeObj.value || false }
icon.source: AppIcons.pencil }
style: ButtonStyle.noBackgroundOrange Item {
KeyNavigation.left: leftPanelStackView.currentItem Layout.fillWidth: true
KeyNavigation.right: deletePopup }
KeyNavigation.up: joinButton RoundButton {
KeyNavigation.down: shareNetworkButton id: editButton
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
property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress) property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress)
property bool canCancel: isMeObj && isMeObj.value && mainItem.selectedConference?.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled visible: mainItem.selectedConference && isMeObj && isMeObj.value || false
icon.source: AppIcons.trashCan icon.source: AppIcons.pencil
//: "Supprimer la réunion" style: ButtonStyle.noBackgroundOrange
text: qsTr("meeting_info_delete") 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: { popup.contentItem: IconLabelButton {
if (mainItem.selectedConference) { style: ButtonStyle.hoveredBackgroundRed
cancelAndDeleteConfDialog.confInfoToDelete = mainItem.selectedConference property var isMeObj: UtilsCpp.isMe(mainItem.selectedConference?.core?.organizerAddress)
cancelAndDeleteConfDialog.cancel = canCancel property bool canCancel: isMeObj && isMeObj.value && mainItem.selectedConference?.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled
cancelAndDeleteConfDialog.open() icon.source: AppIcons.trashCan
deletePopup.close() //: "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 {
Section { Layout.fillWidth: true
Layout.fillWidth: true content: ColumnLayout {
content: ColumnLayout { spacing: Utils.getSizeWithScreenRatio(15)
spacing: Utils.getSizeWithScreenRatio(15) width: parent.width
width: parent.width RowLayout {
RowLayout { spacing: Utils.getSizeWithScreenRatio(8)
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
Layout.fillWidth: true Layout.fillWidth: true
text: mainItem.selectedConference ? mainItem.selectedConference.core?.uri : "" EffectImage {
textSize: Typography.p1.pixelSize Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
textWeight: Typography.p1.weight Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
underline: true colorizationColor: DefaultStyle.main2_600
style: ButtonStyle.noBackground imageSource: AppIcons.videoCamera
Keys.onPressed: (event)=> { }
if (event.key == Qt.Key_Space || event.key == Qt.Key_Enter || event.key == Qt.Key_Return) { SmallButton {
clicked(undefined) id: linkButton
event.accepted = true; 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 RoundButton {
KeyNavigation.right: shareNetworkButton id: shareNetworkButton
KeyNavigation.up: deletePopup style: ButtonStyle.noBackground
KeyNavigation.down: joinButton icon.source: AppIcons.shareNetwork
onClicked: { KeyNavigation.left: linkButton
// TODO : voir si c'est en audio only quand on clique sur le lien KeyNavigation.right: linkButton
UtilsCpp.createCall(mainItem.selectedConference.core.uri) 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 { RowLayout {
id: shareNetworkButton spacing: Utils.getSizeWithScreenRatio(8)
style: ButtonStyle.noBackground EffectImage {
icon.source: AppIcons.shareNetwork Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
KeyNavigation.left: linkButton Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
KeyNavigation.right: linkButton imageSource: AppIcons.clock
KeyNavigation.up: deletePopup colorizationColor: DefaultStyle.main2_600
KeyNavigation.down: calendarPlusButton }
onClicked: { Text {
var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri) text: mainItem.selectedConference && mainItem.selectedConference.core
if (success) UtilsCpp.showInformationPopup(qsTr("saved"), ? UtilsCpp.toDateString(mainItem.selectedConference.core.dateTime)
//: "Adresse de la réunion copiée" + " | " + UtilsCpp.toDateHourString(mainItem.selectedConference.core.dateTime)
qsTr("meeting_address_copied_to_clipboard_toast")) + " - "
+ 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) spacing: Utils.getSizeWithScreenRatio(8)
EffectImage { EffectImage {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
imageSource: AppIcons.clock imageSource: AppIcons.note
colorizationColor: DefaultStyle.main2_600 colorizationColor: DefaultStyle.main2_600
} }
Text { Text {
text: mainItem.selectedConference && mainItem.selectedConference.core text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.description : ""
? UtilsCpp.toDateString(mainItem.selectedConference.core.dateTime) Layout.fillWidth: true
+ " | " + UtilsCpp.toDateHourString(mainItem.selectedConference.core.dateTime)
+ " - "
+ UtilsCpp.toDateHourString(mainItem.selectedConference.core.endDateTime)
: ''
font { font {
pixelSize: Utils.getSizeWithScreenRatio(14) pixelSize: Utils.getSizeWithScreenRatio(14)
capitalization: Font.Capitalize
} }
} }
RoundButton { RoundButton {
@ -784,18 +828,25 @@ AbstractMainPage {
} }
} }
} }
RowLayout { }
Section {
Layout.fillWidth: true
content: RowLayout {
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)
EffectImage { EffectImage {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
imageSource: AppIcons.globe imageSource: AppIcons.userRectangle
colorizationColor: DefaultStyle.main2_600 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 {
Layout.fillWidth: true text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.organizerName : ""
//: "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 { font {
pixelSize: Utils.getSizeWithScreenRatio(14) pixelSize: Utils.getSizeWithScreenRatio(14)
capitalization: Font.Capitalize capitalization: Font.Capitalize
@ -803,132 +854,89 @@ AbstractMainPage {
} }
} }
} }
} Section {
Section { visible: participantList.count > 0
Layout.fillWidth: true Layout.fillWidth: true
visible: mainItem.selectedConference && mainItem.selectedConference.core?.description.length != 0 Layout.fillHeight: true
content: RowLayout { Layout.maximumHeight: participantList.contentHeight + Utils.getSizeWithScreenRatio(1) + spacing
spacing: Utils.getSizeWithScreenRatio(8) content:
EffectImage { RowLayout {
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) width: Utils.getSizeWithScreenRatio(393)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) spacing: Utils.getSizeWithScreenRatio(8)
imageSource: AppIcons.note EffectImage {
colorizationColor: DefaultStyle.main2_600 Layout.preferredWidth: Utils.getSizeWithScreenRatio(24)
} Layout.preferredHeight: Utils.getSizeWithScreenRatio(24)
Text { Layout.alignment: Qt.AlignLeft | Qt.AlignTop
text: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.description : "" Layout.topMargin: Utils.getSizeWithScreenRatio(20)
Layout.fillWidth: true imageSource: AppIcons.usersTwo
font { colorizationColor: DefaultStyle.main2_600
pixelSize: Utils.getSizeWithScreenRatio(14)
} }
} ListView {
} id: participantList
} // Layout.preferredHeight: contentHeight
Section { Layout.fillWidth: true
Layout.fillWidth: true Layout.fillHeight: true
content: RowLayout { height: contentHeight
spacing: Utils.getSizeWithScreenRatio(8) model: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.participants : []
EffectImage { clip: true
Layout.preferredWidth: Utils.getSizeWithScreenRatio(24) Control.ScrollBar.vertical: ScrollBar {
Layout.preferredHeight: Utils.getSizeWithScreenRatio(24) id: participantScrollBar
imageSource: AppIcons.userRectangle anchors.right: participantList.right
colorizationColor: DefaultStyle.main2_600 anchors.top: participantList.top
} anchors.bottom: participantList.bottom
Avatar { visible: participantList.height < participantList.contentHeight
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
} }
Text { delegate: RowLayout {
property var displayNameObj: UtilsCpp.getDisplayName(modelData.address) height: Utils.getSizeWithScreenRatio(56)
text: displayNameObj?.value || "" width: participantList.width - participantScrollBar.width - Utils.getSizeWithScreenRatio(5)
maximumLineCount: 1 Avatar {
Layout.fillWidth: true Layout.preferredWidth: Utils.getSizeWithScreenRatio(45)
font { Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
pixelSize: Utils.getSizeWithScreenRatio(14) _address: modelData.address
capitalization: Font.Capitalize secured: friendSecurityLevel === LinphoneEnums.SecurityLevel.EndToEndEncryptedAndVerified
shadowEnabled: false
} }
} Text {
Text { property var displayNameObj: UtilsCpp.getDisplayName(modelData.address)
//: "Organisateur" text: displayNameObj?.value || ""
text: qsTr("meeting_info_organizer_label") maximumLineCount: 1
visible: mainItem.selectedConference && mainItem.selectedConference.core?.organizerAddress === modelData.address Layout.fillWidth: true
color: DefaultStyle.main2_400 font {
font { pixelSize: Utils.getSizeWithScreenRatio(14)
pixelSize: Utils.getSizeWithScreenRatio(12) capitalization: Font.Capitalize
weight: Utils.getSizeWithScreenRatio(300) }
}
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 {
BigButton { id: joinButton
id: joinButton visible: mainItem.selectedConference && mainItem.selectedConference.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled
visible: mainItem.selectedConference && mainItem.selectedConference.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled Layout.fillWidth: true
Layout.fillWidth: true //: "Rejoindre la réunion"
//: "Rejoindre la réunion" text: qsTr("meeting_info_join_title")
text: qsTr("meeting_info_join_title") focus: true
focus: true KeyNavigation.up: shareNetworkButton
KeyNavigation.up: shareNetworkButton KeyNavigation.down: deletePopup
KeyNavigation.down: deletePopup KeyNavigation.left: leftPanelStackView.currentItem
KeyNavigation.left: leftPanelStackView.currentItem KeyNavigation.right: leftPanelStackView.currentItem
KeyNavigation.right: leftPanelStackView.currentItem onClicked: {
onClicked: { console.log(mainItem.selectedConference.core.uri)
console.log(mainItem.selectedConference.core.uri) var callsWindow = UtilsCpp.getOrCreateCallsWindow()
var callsWindow = UtilsCpp.getOrCreateCallsWindow() callsWindow.setupConference(mainItem.selectedConference)
callsWindow.setupConference(mainItem.selectedConference) UtilsCpp.smartShowWindow(callsWindow)
UtilsCpp.smartShowWindow(callsWindow) }
} }
} }
} }