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

0001 /*
0002    SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "channelinforeadonlywidget.h"
0008 #include "rocketchataccount.h"
0009 #include "room.h"
0010 #include "roomavatarreadonlywidget.h"
0011 #include <KLocalizedString>
0012 #include <QFormLayout>
0013 #include <QLabel>
0014 
0015 ChannelInfoReadOnlyWidget::ChannelInfoReadOnlyWidget(RocketChatAccount *account, QWidget *parent)
0016     : QWidget(parent)
0017     , mNameReadOnly(new QLabel(this))
0018     , mRoomAvatarWidget(new RoomAvatarReadOnlyWidget(this))
0019     , mRocketChatAccount(account)
0020     , mLayoutReadOnly(new QFormLayout(this))
0021 {
0022     mLayoutReadOnly->setObjectName(QStringLiteral("layoutReadOnly"));
0023     mLayoutReadOnly->setContentsMargins({});
0024 
0025     mRoomAvatarWidget->setObjectName(QStringLiteral("mRoomAvatarWidget"));
0026     mLayoutReadOnly->addRow(QStringLiteral(" "), mRoomAvatarWidget);
0027 
0028     mNameReadOnly->setTextFormat(Qt::RichText);
0029     mNameReadOnly->setObjectName(QStringLiteral("mNameReadOnly"));
0030     mNameReadOnly->setTextInteractionFlags(Qt::TextBrowserInteraction);
0031     mNameReadOnly->setOpenExternalLinks(true);
0032     mNameReadOnly->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
0033     mLayoutReadOnly->addRow(i18n("Name:"), mNameReadOnly);
0034 }
0035 
0036 ChannelInfoReadOnlyWidget::~ChannelInfoReadOnlyWidget() = default;
0037 
0038 void ChannelInfoReadOnlyWidget::createDescriptionReadOnly()
0039 {
0040     mDescriptionReadOnly = new QLabel(this);
0041     mDescriptionReadOnly->setTextFormat(Qt::RichText);
0042     mDescriptionReadOnly->setObjectName(QStringLiteral("mDescriptionReadOnly"));
0043     mDescriptionReadOnly->setTextInteractionFlags(Qt::TextBrowserInteraction);
0044     mDescriptionReadOnly->setOpenExternalLinks(true);
0045     mDescriptionReadOnly->setWordWrap(true);
0046     mDescriptionReadOnly->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
0047     mLayoutReadOnly->addRow(i18n("Description:"), mDescriptionReadOnly);
0048 }
0049 
0050 void ChannelInfoReadOnlyWidget::createCommentReadOnly()
0051 {
0052     mCommentReadOnly = new QLabel(this);
0053     mCommentReadOnly->setTextFormat(Qt::RichText);
0054     mCommentReadOnly->setObjectName(QStringLiteral("mCommentReadOnly"));
0055     mCommentReadOnly->setTextInteractionFlags(Qt::TextBrowserInteraction);
0056     mCommentReadOnly->setOpenExternalLinks(true);
0057     mCommentReadOnly->setWordWrap(true);
0058     mCommentReadOnly->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
0059     mLayoutReadOnly->addRow(i18n("Comment:"), mCommentReadOnly);
0060 }
0061 
0062 void ChannelInfoReadOnlyWidget::createAnnouncementReadOnly()
0063 {
0064     mAnnouncementReadOnly = new QLabel(this);
0065     mAnnouncementReadOnly->setTextFormat(Qt::RichText);
0066     mAnnouncementReadOnly->setObjectName(QStringLiteral("mAnnouncementReadOnly"));
0067     mAnnouncementReadOnly->setTextInteractionFlags(Qt::TextBrowserInteraction);
0068     mAnnouncementReadOnly->setOpenExternalLinks(true);
0069     mAnnouncementReadOnly->setWordWrap(true);
0070     mAnnouncementReadOnly->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
0071     mLayoutReadOnly->addRow(i18n("Announcement:"), mAnnouncementReadOnly);
0072 }
0073 
0074 void ChannelInfoReadOnlyWidget::setRoom(Room *room)
0075 {
0076     mRoom = room;
0077     updateReadOnlyChannelInfo();
0078     connectReadOnlyWidget();
0079 }
0080 
0081 void ChannelInfoReadOnlyWidget::updateReadOnlyChannelInfo()
0082 {
0083     mNameReadOnly->setText(mRoom->displayFName());
0084     if (!mRoom->displayTopic().isEmpty()) {
0085         if (!mCommentReadOnly) {
0086             createCommentReadOnly();
0087         }
0088         mCommentReadOnly->setText(mRoom->displayTopic());
0089     }
0090     if (!mRoom->displayAnnouncement().isEmpty()) {
0091         if (!mAnnouncementReadOnly) {
0092             createAnnouncementReadOnly();
0093         }
0094         mAnnouncementReadOnly->setText(mRoom->displayAnnouncement());
0095     }
0096     if (!mRoom->description().isEmpty()) {
0097         if (!mDescriptionReadOnly) {
0098             createDescriptionReadOnly();
0099         }
0100         mDescriptionReadOnly->setText(mRoom->description());
0101     }
0102 }
0103 
0104 void ChannelInfoReadOnlyWidget::connectReadOnlyWidget()
0105 {
0106     connect(mRoom, &Room::announcementChanged, this, [this]() {
0107         if (!mAnnouncementReadOnly) {
0108             createAnnouncementReadOnly();
0109         }
0110         mAnnouncementReadOnly->setText(mRoom->announcement());
0111     });
0112     connect(mRoom, &Room::topicChanged, this, [this]() {
0113         if (!mCommentReadOnly) {
0114             createCommentReadOnly();
0115         }
0116         mCommentReadOnly->setText(mRoom->topic());
0117     });
0118     connect(mRoom, &Room::nameChanged, this, [this]() {
0119         mNameReadOnly->setText(mRoom->name());
0120     });
0121     connect(mRoom, &Room::descriptionChanged, this, [this]() {
0122         if (!mDescriptionReadOnly) {
0123             createDescriptionReadOnly();
0124         }
0125         mDescriptionReadOnly->setText(mRoom->description());
0126     });
0127     const Utils::AvatarInfo avatarInfo = mRoom->avatarInfo();
0128     const QString iconUrlStr = mRocketChatAccount->avatarUrl(avatarInfo);
0129     mRoomAvatarWidget->setCurrentIconPath(iconUrlStr);
0130 }
0131 
0132 #include "moc_channelinforeadonlywidget.cpp"