File indexing completed on 2024-05-12 16:27:13

0001 /*
0002    SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "channelrolesinfowidget.h"
0008 #include "roles/roles.h"
0009 #include "room.h"
0010 
0011 #include <KLocalizedString>
0012 #include <QFormLayout>
0013 #include <QGroupBox>
0014 #include <QLabel>
0015 
0016 ChannelRolesInfoWidget::ChannelRolesInfoWidget(QWidget *parent)
0017     : QWidget{parent}
0018     , mFormLayout(new QFormLayout())
0019 {
0020     mFormLayout->setObjectName(QStringLiteral("mFormLayout"));
0021     auto box = new QGroupBox(i18n("Roles"), this);
0022     box->setObjectName(QStringLiteral("box"));
0023     box->setLayout(mFormLayout);
0024     auto mainLayout = new QHBoxLayout(this);
0025     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0026     mainLayout->setContentsMargins({});
0027     mainLayout->addWidget(box);
0028 }
0029 
0030 ChannelRolesInfoWidget::~ChannelRolesInfoWidget() = default;
0031 
0032 void ChannelRolesInfoWidget::setRoom(Room *room)
0033 {
0034     if (room) {
0035         const Roles rolesForRoom = room->rolesForRooms();
0036         QStringList listOwners;
0037         const auto roles = rolesForRoom.roles();
0038         for (const Role &role : roles) {
0039             if (role.isOwner()) {
0040                 listOwners.append(role.userName());
0041             }
0042         }
0043         QStringList listModerators;
0044         for (const Role &role : roles) {
0045             if (role.isModerator()) {
0046                 listModerators.append(role.userName());
0047             }
0048         }
0049         QStringList listLeaders;
0050         for (const Role &role : roles) {
0051             if (role.isLeader()) {
0052                 listLeaders.append(role.userName());
0053             }
0054         }
0055         if (!listOwners.isEmpty()) {
0056             generateInfo(i18np("Owner:", "Owners:", listOwners.count()), listOwners);
0057         }
0058         if (!listModerators.isEmpty()) {
0059             generateInfo(i18np("Moderator:", "Moderators:", listModerators.count()), listModerators);
0060         }
0061         if (!listLeaders.isEmpty()) {
0062             generateInfo(i18np("Leader:", "Leaders:", listLeaders.count()), listLeaders);
0063         }
0064         if (!listOwners.isEmpty() || !listModerators.isEmpty() || !listLeaders.isEmpty()) {
0065             show();
0066         } else {
0067             hide();
0068         }
0069     } else {
0070         hide();
0071     }
0072 }
0073 
0074 void ChannelRolesInfoWidget::generateInfo(const QString &labelStr, const QStringList &list)
0075 {
0076     auto label = new QLabel(this);
0077     label->setTextFormat(Qt::PlainText);
0078     label->setText(list.join(QLatin1Char(',')));
0079     label->setTextInteractionFlags(Qt::TextBrowserInteraction);
0080     label->setWordWrap(true);
0081     auto labelInfo = new QLabel(this);
0082     labelInfo->setTextFormat(Qt::RichText);
0083     labelInfo->setText(QStringLiteral("<qt><b>%1</b></qt>").arg(labelStr));
0084     mFormLayout->addRow(labelInfo, label);
0085 }
0086 
0087 #include "moc_channelrolesinfowidget.cpp"