Skip to content

Commit

Permalink
fixed #1590
Browse files Browse the repository at this point in the history
  • Loading branch information
martinrotter committed Jan 30, 2025
1 parent 1ad746f commit 7c0ca64
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 6 deletions.
34 changes: 31 additions & 3 deletions src/librssguard/gui/reusable/searchlineedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,25 @@
#include "gui/reusable/plaintoolbutton.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/settings.h"

#include <QActionGroup>
#include <QTimer>
#include <QWidgetAction>

SearchLineEdit::SearchLineEdit(const QList<CustomSearchChoice>& choices, QWidget* parent) : BaseLineEdit(parent) {
SearchLineEdit::SearchLineEdit(const QString& save_identification,
const QList<CustomSearchChoice>& choices,
QWidget* parent)
: BaseLineEdit(parent), m_saveIdentification(save_identification) {
Qt::CaseSensitivity save_sens = Qt::CaseSensitivity(qApp->settings()
->value(m_saveIdentification,
QSL("case_sensitivity"),
int(Qt::CaseSensitivity::CaseInsensitive))
.toInt());
SearchMode save_mode =
SearchMode(qApp->settings()->value(m_saveIdentification, QSL("search_mode"), int(SearchMode::FixedString)).toInt());
int save_custom_choice = qApp->settings()->value(m_saveIdentification, QSL("criteria"), choices.at(0).m_data).toInt();

QWidgetAction* act = new QWidgetAction(this);
PlainToolButton* btn = new PlainToolButton(this);

Expand All @@ -29,6 +42,7 @@ SearchLineEdit::SearchLineEdit(const QList<CustomSearchChoice>& choices, QWidget

m_actCaseSensitivity = m_menu->addAction(tr("Case-sensitive"));
m_actCaseSensitivity->setCheckable(true);
m_actCaseSensitivity->setChecked(save_sens == Qt::CaseSensitivity::CaseSensitive);

m_menu->addSeparator();

Expand All @@ -47,9 +61,10 @@ SearchLineEdit::SearchLineEdit(const QList<CustomSearchChoice>& choices, QWidget

ac->setCheckable(true);
ac->setData(int(mode));
ac->setChecked(mode == save_mode);
}

m_actionGroupModes->actions().first()->setChecked(true);
// m_actionGroupModes->actions().first()->setChecked(true);

if (!choices.isEmpty()) {
m_menu->addSeparator();
Expand All @@ -60,16 +75,18 @@ SearchLineEdit::SearchLineEdit(const QList<CustomSearchChoice>& choices, QWidget

ac->setCheckable(true);
ac->setData(choice.m_data);
ac->setChecked(choice.m_data == save_custom_choice);
}

m_actionGroupChoices->actions().first()->setChecked(true);
// m_actionGroupChoices->actions().first()->setChecked(true);
}

// NOTE: When any change is made, (re)start the timer which fires
// the signal with delay to avoid throttling.
connect(this, &SearchLineEdit::textChanged, m_tmrSearchPattern, QOverload<>::of(&QTimer::start));
connect(m_menu, &QMenu::triggered, m_tmrSearchPattern, QOverload<>::of(&QTimer::start));
connect(m_tmrSearchPattern, &QTimer::timeout, this, &SearchLineEdit::startSearch);
connect(this, &SearchLineEdit::searchCriteriaChanged, this, &SearchLineEdit::saveSearchConfig);
}

void SearchLineEdit::startSearch() {
Expand All @@ -95,6 +112,17 @@ void SearchLineEdit::startSearch() {
text());
}

void SearchLineEdit::saveSearchConfig(SearchMode mode,
Qt::CaseSensitivity sensitivity,
int custom_criteria,
const QString& phrase) {
Q_UNUSED(phrase)

qApp->settings()->setValue(m_saveIdentification, QSL("case_sensitivity"), int(sensitivity));
qApp->settings()->setValue(m_saveIdentification, QSL("search_mode"), int(mode));
qApp->settings()->setValue(m_saveIdentification, QSL("criteria"), custom_criteria);
}

QString SearchLineEdit::titleForMode(SearchMode mode) {
switch (mode) {
case SearchLineEdit::SearchMode::FixedString:
Expand Down
6 changes: 5 additions & 1 deletion src/librssguard/gui/reusable/searchlineedit.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,13 @@ class SearchLineEdit : public BaseLineEdit {
RegularExpression = 4
};

explicit SearchLineEdit(const QList<CustomSearchChoice>& choices, QWidget* parent = nullptr);
explicit SearchLineEdit(const QString& save_identification,
const QList<CustomSearchChoice>& choices,
QWidget* parent = nullptr);

private slots:
void startSearch();
void saveSearchConfig(SearchMode mode, Qt::CaseSensitivity sensitivity, int custom_criteria, const QString& phrase);

signals:
void searchCriteriaChanged(SearchMode mode,
Expand All @@ -40,6 +43,7 @@ class SearchLineEdit : public BaseLineEdit {
QString titleForMode(SearchMode mode);

private:
QString m_saveIdentification;
QTimer* m_tmrSearchPattern;
QMenu* m_menu;
QAction* m_actCaseSensitivity;
Expand Down
3 changes: 2 additions & 1 deletion src/librssguard/gui/toolbars/feedstoolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ QStringList FeedsToolBar::savedActions() const {

void FeedsToolBar::initializeSearchBox() {
m_txtSearchMessages =
new SearchLineEdit({SearchLineEdit::CustomSearchChoice(tr("Everywhere"), int(SearchFields::SearchAll)),
new SearchLineEdit(QSL("feed_list_searcher"),
{SearchLineEdit::CustomSearchChoice(tr("Everywhere"), int(SearchFields::SearchAll)),
SearchLineEdit::CustomSearchChoice(tr("Titles only"), int(SearchFields::SearchTitleOnly))},
this);
m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding,
Expand Down
3 changes: 2 additions & 1 deletion src/librssguard/gui/toolbars/messagestoolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ void MessagesToolBar::handleMessageFilterChange(QAction* action) {

void MessagesToolBar::initializeSearchBox() {
m_txtSearchMessages =
new SearchLineEdit({SearchLineEdit::CustomSearchChoice(tr("Everywhere"), int(SearchFields::SearchAll)),
new SearchLineEdit(QSL("article_list_searcher"),
{SearchLineEdit::CustomSearchChoice(tr("Everywhere"), int(SearchFields::SearchAll)),
SearchLineEdit::CustomSearchChoice(tr("Titles only"), int(SearchFields::SearchTitleOnly))},
this);
m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding,
Expand Down

0 comments on commit 7c0ca64

Please sign in to comment.