File indexing completed on 2024-05-12 16:27:16
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 "misc/lineeditcatchreturnkey.h" 0009 #include "model/listmessagesfilterproxymodel.h" 0010 #include "room/messagelistview.h" 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 new LineEditCatchReturnKey(mSearchMessageLineEdit, this); 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 #if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) 0047 mMessageListView->setProperty("_breeze_borders_sides", QVariant{}); 0048 #endif 0049 QFont labFont = mMessageListInfo->font(); 0050 labFont.setBold(true); 0051 mMessageListInfo->setFont(labFont); 0052 connect(mMessageListInfo, &QLabel::linkActivated, this, &ShowListMessageBaseWidget::loadMoreElements); 0053 mainLayout->addWidget(mMessageListInfo); 0054 0055 mMessageListView->setObjectName(QStringLiteral("mMessageListView")); 0056 0057 #if HAVE_TEXT_TO_SPEECH 0058 mTextToSpeechWidget->setObjectName(QStringLiteral("mTextToSpeechWidget")); 0059 mainLayout->addWidget(mTextToSpeechWidget); 0060 connect(mMessageListView, &MessageListView::textToSpeech, mTextToSpeechWidget, &TextEditTextToSpeech::TextToSpeechContainerWidget::say); 0061 #endif 0062 0063 mainLayout->addWidget(mMessageListView); 0064 connect(mMessageListView, &MessageListView::modelChanged, this, &ShowListMessageBaseWidget::updateLabel); 0065 } 0066 0067 ShowListMessageBaseWidget::~ShowListMessageBaseWidget() 0068 { 0069 // Clear search text 0070 if (mModel && mModel->listMessageModel()) { 0071 mModel->listMessageModel()->setSearchText({}); 0072 mModel->clear(); 0073 } 0074 } 0075 0076 void ShowListMessageBaseWidget::setModel(ListMessagesFilterProxyModel *model) 0077 { 0078 mModel = model; 0079 mMessageListView->setModel(model); 0080 mModel->setFilterString({}); 0081 connect(mModel, &ListMessagesFilterProxyModel::hasFullListChanged, this, &ShowListMessageBaseWidget::updateLabel); 0082 connect(mModel, &ListMessagesFilterProxyModel::loadingInProgressChanged, this, &ShowListMessageBaseWidget::updateLabel); 0083 updateLabel(); 0084 } 0085 0086 MessageListView *ShowListMessageBaseWidget::messageListView() const 0087 { 0088 return mMessageListView; 0089 } 0090 0091 void ShowListMessageBaseWidget::setRoom(Room *room) 0092 { 0093 mMessageListView->setRoom(room); 0094 } 0095 0096 void ShowListMessageBaseWidget::updateLabel() 0097 { 0098 if (mModel->loadMoreListMessagesInProgress()) { 0099 mMessageListInfo->setText(i18n("Loading...")); 0100 } else { 0101 mMessageListInfo->setText(mModel->numberOfMessages() == 0 ? i18n("No Message found") : displayShowMessageInRoom()); 0102 } 0103 } 0104 0105 QString ShowListMessageBaseWidget::displayShowMessageInRoom() const 0106 { 0107 QString displayMessageStr = i18np("%1 Message in room (Total: %2)", "%1 Messages in room (Total: %2)", mModel->numberOfMessages(), mModel->total()); 0108 if (!mModel->hasFullList()) { 0109 displayMessageStr += QStringLiteral(" <a href=\"loadmoreelement\">%1</a>").arg(i18n("(Click here for Loading more...)")); 0110 } 0111 return displayMessageStr; 0112 } 0113 0114 void ShowListMessageBaseWidget::slotSearchMessageTextChanged(const QString &str) 0115 { 0116 mModel->setFilterString(str); 0117 mModel->listMessageModel()->setSearchText(str); 0118 mMessageListView->setSearchText(str); 0119 } 0120 0121 #include "moc_showlistmessagebasewidget.cpp"