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"