From 92c00c0c8a3c1cda89392fe8bd8e0349cb0a0aae Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 1 Feb 2023 12:05:57 +0100 Subject: [PATCH] fixed #889 --- .../gui/dialogs/formmessagefiltersmanager.cpp | 35 ++++++++++++++++++ .../gui/dialogs/formmessagefiltersmanager.h | 3 ++ .../gui/dialogs/formmessagefiltersmanager.ui | 37 +++++++++++++------ 3 files changed, 64 insertions(+), 11 deletions(-) diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp index 2f2ab3ddb..c183cb110 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.cpp @@ -99,6 +99,17 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, this, &FormMessageFiltersManager::showMessageContextMenu); + connect(m_ui.m_searchWidget, &SearchTextWidget::searchCancelled, this, [this]() { + m_ui.m_txtScript->find(QString()); + }); + connect(m_ui.m_searchWidget, &SearchTextWidget::searchForText, this, [this](const QString& text, bool backwards) { + m_ui.m_txtScript->find(text, backwards ? QTextDocument::FindFlag::FindBackward : QTextDocument::FindFlags()); + m_ui.m_searchWidget->setFocus(); + }); + + m_ui.m_txtScript->installEventFilter(this); + m_ui.m_searchWidget->hide(); + initializeTestingMessage(); initializePremadeFilters(); loadFilters(); @@ -119,6 +130,30 @@ MessageFilter* FormMessageFiltersManager::selectedFilter() const { } } +bool FormMessageFiltersManager::eventFilter(QObject* watched, QEvent* event) { + Q_UNUSED(watched) + + if (event->type() == QEvent::KeyPress) { + QKeyEvent* key_event = static_cast(event); + + // Find text. + if (key_event->matches(QKeySequence::StandardKey::Find)) { + m_ui.m_searchWidget->clear(); + m_ui.m_searchWidget->show(); + m_ui.m_searchWidget->setFocus(); + return true; + } + + // Hide visible search box. + if (key_event->key() == Qt::Key::Key_Escape && m_ui.m_searchWidget->isVisible()) { + m_ui.m_searchWidget->hide(); + return true; + } + } + + return false; +} + ServiceRoot* FormMessageFiltersManager::selectedAccount() const { auto dat = m_ui.m_cmbAccounts->currentData(Qt::ItemDataRole::UserRole); diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.h b/src/librssguard/gui/dialogs/formmessagefiltersmanager.h index 923274b04..235521b49 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.h +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.h @@ -26,6 +26,9 @@ class FormMessageFiltersManager : public QDialog { MessageFilter* selectedFilter() const; ServiceRoot* selectedAccount() const; + protected: + virtual bool eventFilter(QObject* watched, QEvent* event); + private slots: void filterMessagesLikeThis(const Message& msg); void showMessageContextMenu(QPoint pos); diff --git a/src/librssguard/gui/dialogs/formmessagefiltersmanager.ui b/src/librssguard/gui/dialogs/formmessagefiltersmanager.ui index 0dde02e32..7210f0b6c 100644 --- a/src/librssguard/gui/dialogs/formmessagefiltersmanager.ui +++ b/src/librssguard/gui/dialogs/formmessagefiltersmanager.ui @@ -179,17 +179,24 @@ - - - - 0 - 1 - - - - Your JavaScript-based article filtering logic - - + + + + + + 0 + 1 + + + + Your JavaScript-based article filtering logic + + + + + + + @@ -445,6 +452,14 @@ + + + SearchTextWidget + QWidget +
searchtextwidget.h
+ 1 +
+
m_listFilters m_btnAddNew