File indexing completed on 2024-05-19 05:04:06
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "showlistmessagebasewidget.h" 0008 #include "model/listmessagesfilterproxymodel.h" 0009 #include "room/messagelistview.h" 0010 #include <KLineEditEventHandler> 0011 0012 #include <KLocalizedString> 0013 #include <QLabel> 0014 #include <QLineEdit> 0015 #include <QVBoxLayout> 0016 0017 #include "config-ruqola.h" 0018 0019 #if HAVE_TEXT_TO_SPEECH 0020 #include <TextEditTextToSpeech/TextToSpeechContainerWidget> 0021 #endif 0022 0023 ShowListMessageBaseWidget::ShowListMessageBaseWidget(RocketChatAccount *account, QWidget *parent) 0024 : QWidget(parent) 0025 , mSearchMessageLineEdit(new QLineEdit(this)) 0026 , mMessageListInfo(new QLabel(this)) 0027 , mMessageListView(new MessageListView(account, MessageListView::Mode::Viewing, this)) 0028 #if HAVE_TEXT_TO_SPEECH 0029 , mTextToSpeechWidget(new TextEditTextToSpeech::TextToSpeechContainerWidget(this)) 0030 #endif 0031 { 0032 auto mainLayout = new QVBoxLayout(this); 0033 mainLayout->setObjectName(QStringLiteral("mainLayout")); 0034 mainLayout->setContentsMargins({}); 0035 0036 mSearchMessageLineEdit->setObjectName(QStringLiteral("mSearchMessageLineEdit")); 0037 mSearchMessageLineEdit->setClearButtonEnabled(true); 0038 KLineEditEventHandler::catchReturnKey(mSearchMessageLineEdit); 0039 mSearchMessageLineEdit->setPlaceholderText(i18n("Search messages...")); 0040 connect(mSearchMessageLineEdit, &QLineEdit::textChanged, this, &ShowListMessageBaseWidget::slotSearchMessageTextChanged); 0041 mainLayout->addWidget(mSearchMessageLineEdit); 0042 0043 mMessageListInfo->setObjectName(QStringLiteral("mMessageListInfo")); 0044 mMessageListInfo->setTextFormat(Qt::RichText); 0045 mMessageListInfo->setContextMenuPolicy(Qt::NoContextMenu); 0046 mMessageListView->setProperty("_breeze_borders_sides", QVariant{}); 0047 QFont labFont = mMessageListInfo->font(); 0048 labFont.setBold(true); 0049 mMessageListInfo->setFont(labFont); 0050 connect(mMessageListInfo, &QLabel::linkActivated, this, &ShowListMessageBaseWidget::loadMoreElements); 0051 mainLayout->addWidget(mMessageListInfo); 0052 0053 mMessageListView->setObjectName(QStringLiteral("mMessageListView")); 0054 0055 #if HAVE_TEXT_TO_SPEECH 0056 mTextToSpeechWidget->setObjectName(QStringLiteral("mTextToSpeechWidget")); 0057 mainLayout->addWidget(mTextToSpeechWidget); 0058 connect(mMessageListView, &MessageListView::textToSpeech, mTextToSpeechWidget, &TextEditTextToSpeech::TextToSpeechContainerWidget::say); 0059 #endif 0060 0061 mainLayout->addWidget(mMessageListView); 0062 connect(mMessageListView, &MessageListView::modelChanged, this, &ShowListMessageBaseWidget::updateLabel); 0063 } 0064 0065 ShowListMessageBaseWidget::~ShowListMessageBaseWidget() 0066 { 0067 // Clear search text 0068 if (mModel && mModel->listMessageModel()) { 0069 mModel->listMessageModel()->setSearchText({}); 0070 mModel->clear(); 0071 } 0072 } 0073 0074 void ShowListMessageBaseWidget::setModel(ListMessagesFilterProxyModel *model) 0075 { 0076 mModel = model; 0077 mMessageListView->setModel(model); 0078 mModel->setFilterString({}); 0079 connect(mModel, &ListMessagesFilterProxyModel::hasFullListChanged, this, &ShowListMessageBaseWidget::updateLabel); 0080 connect(mModel, &ListMessagesFilterProxyModel::loadingInProgressChanged, this, &ShowListMessageBaseWidget::updateLabel); 0081 updateLabel(); 0082 } 0083 0084 MessageListView *ShowListMessageBaseWidget::messageListView() const 0085 { 0086 return mMessageListView; 0087 } 0088 0089 void ShowListMessageBaseWidget::setRoom(Room *room) 0090 { 0091 mMessageListView->setRoom(room); 0092 } 0093 0094 void ShowListMessageBaseWidget::updateLabel() 0095 { 0096 if (mModel->loadMoreListMessagesInProgress()) { 0097 mMessageListInfo->setText(i18n("Loading...")); 0098 } else { 0099 mMessageListInfo->setText(mModel->numberOfMessages() == 0 ? i18n("No Message found") : displayShowMessageInRoom()); 0100 } 0101 } 0102 0103 QString ShowListMessageBaseWidget::displayShowMessageInRoom() const 0104 { 0105 QString displayMessageStr = i18np("%1 Message in room (Total: %2)", "%1 Messages in room (Total: %2)", mModel->numberOfMessages(), mModel->total()); 0106 if (!mModel->hasFullList()) { 0107 displayMessageStr += QStringLiteral(" <a href=\"loadmoreelement\">%1</a>").arg(i18n("(Click here for Loading more...)")); 0108 } 0109 return displayMessageStr; 0110 } 0111 0112 void ShowListMessageBaseWidget::slotSearchMessageTextChanged(const QString &str) 0113 { 0114 mModel->setFilterString(str); 0115 mModel->listMessageModel()->setSearchText(str); 0116 mMessageListView->setSearchText(str); 0117 } 0118 0119 #include "moc_showlistmessagebasewidget.cpp"