filtering of messages is run with delay to avoid repeated filtering

This commit is contained in:
Martin Rotter 2021-09-07 11:06:49 +02:00
parent 5c5a5b004c
commit 91356bcaec
3 changed files with 24 additions and 1 deletions

View File

@ -659,6 +659,10 @@ void MessagesView::selectNextUnreadItem() {
}
void MessagesView::searchMessages(const QString& pattern) {
qDebugNN << LOGSEC_GUI
<< "Running search of messages with pattern"
<< QUOTE_W_SPACE_DOT(pattern);
#if QT_VERSION < 0x050C00 // Qt < 5.12.0
m_proxyModel->setFilterRegExp(pattern.toLower());
#else

View File

@ -7,10 +7,14 @@
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/settings.h"
#include <chrono>
#include <QMenu>
#include <QTimer>
#include <QToolButton>
#include <QWidgetAction>
using namespace std::chrono_literals;
MessagesToolBar::MessagesToolBar(const QString& title, QWidget* parent) : BaseToolBar(title, parent) {
initializeSearchBox();
initializeHighlighter();
@ -101,6 +105,9 @@ void MessagesToolBar::handleMessageHighlighterChange(QAction* action) {
}
void MessagesToolBar::initializeSearchBox() {
m_tmrSearchPattern = new QTimer(this);
m_tmrSearchPattern->setSingleShot(true);
m_txtSearchMessages = new BaseLineEdit(this);
m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding, m_txtSearchMessages->sizePolicy().verticalPolicy());
m_txtSearchMessages->setPlaceholderText(tr("Search articles"));
@ -112,7 +119,10 @@ void MessagesToolBar::initializeSearchBox() {
m_actionSearchMessages->setProperty("type", SEARCH_BOX_ACTION_NAME);
m_actionSearchMessages->setProperty("name", tr("Article search box"));
connect(m_txtSearchMessages, &BaseLineEdit::textChanged, this, &MessagesToolBar::messageSearchPatternChanged);
connect(m_txtSearchMessages, &BaseLineEdit::textChanged, this, &MessagesToolBar::onSearchPatternChanged);
connect(m_tmrSearchPattern, &QTimer::timeout, this, [this]() {
emit messageSearchPatternChanged(m_searchPattern);
});
}
void MessagesToolBar::initializeHighlighter() {
@ -155,3 +165,8 @@ QStringList MessagesToolBar::savedActions() const {
QString::SplitBehavior::SkipEmptyParts);
#endif
}
void MessagesToolBar::onSearchPatternChanged(const QString& search_pattern) {
m_searchPattern = search_pattern;
m_tmrSearchPattern->start(700ms);
}

View File

@ -11,6 +11,7 @@ class BaseLineEdit;
class QWidgetAction;
class QToolButton;
class QMenu;
class QTimer;
class MessagesToolBar : public BaseToolBar {
Q_OBJECT
@ -31,6 +32,7 @@ class MessagesToolBar : public BaseToolBar {
void messageFilterChanged(MessagesModel::MessageHighlighter filter);
private slots:
void onSearchPatternChanged(const QString& search_pattern);
void handleMessageHighlighterChange(QAction* action);
private:
@ -43,6 +45,8 @@ class MessagesToolBar : public BaseToolBar {
QMenu* m_menuMessageHighlighter;
QWidgetAction* m_actionSearchMessages;
BaseLineEdit* m_txtSearchMessages;
QTimer* m_tmrSearchPattern;
QString m_searchPattern;
};
#endif // NEWSTOOLBAR_H