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:
- !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

View file

@ -551,8 +551,10 @@ void ConferenceInfoCore::writeIntoModel(std::shared_ptr<ConferenceInfoModel> 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);
}

View file

@ -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;
}
}
}
}

View file

@ -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

View file

@ -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)

View file

@ -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)
}
}
}
}