From 248552589649908a642748cd56a55704bdd33e2d Mon Sep 17 00:00:00 2001 From: thalieht Date: Sun, 29 Jul 2018 15:46:19 +0300 Subject: [PATCH] Add option for regexps in the transferlist search filter's context menu --- src/base/preferences.cpp | 10 ++++++++++ src/base/preferences.h | 2 ++ src/gui/mainwindow.cpp | 21 ++++++++++++++++++++- src/gui/mainwindow.h | 1 + src/gui/transferlistwidget.cpp | 4 +++- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/base/preferences.cpp b/src/base/preferences.cpp index b02b1e5b5..c51a6bb48 100644 --- a/src/base/preferences.cpp +++ b/src/base/preferences.cpp @@ -1489,6 +1489,16 @@ void Preferences::setTransHeaderState(const QByteArray &state) setValue("TransferList/qt5/HeaderState", state); } +bool Preferences::getRegexAsFilteringPattern() const +{ + return value("TransferList/UseRegexAsFilteringPattern", false).toBool(); +} + +void Preferences::setRegexAsFilteringPattern(const bool checked) +{ + setValue("TransferList/UseRegexAsFilteringPattern", checked); +} + // From old RssSettings class bool Preferences::isRSSWidgetEnabled() const { diff --git a/src/base/preferences.h b/src/base/preferences.h index 136ad106f..d82cc211d 100644 --- a/src/base/preferences.h +++ b/src/base/preferences.h @@ -350,6 +350,8 @@ public: void setTransSelFilter(const int &index); QByteArray getTransHeaderState() const; void setTransHeaderState(const QByteArray &state); + bool getRegexAsFilteringPattern() const; + void setRegexAsFilteringPattern(bool checked); int getToolbarTextPosition() const; void setToolbarTextPosition(const int position); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 396e4a087..d53093a93 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -232,9 +232,11 @@ MainWindow::MainWindow(QWidget *parent) // Name filter m_searchFilter = new LineEdit(this); - m_searchFilterAction = m_ui->toolBar->insertWidget(m_ui->actionLock, m_searchFilter); m_searchFilter->setPlaceholderText(tr("Filter torrent list...")); m_searchFilter->setFixedWidth(Utils::Gui::scaledSize(this, 200)); + m_searchFilter->setContextMenuPolicy(Qt::CustomContextMenu); + connect(m_searchFilter, &QWidget::customContextMenuRequested, this, &MainWindow::showFilterContextMenu); + m_searchFilterAction = m_ui->toolBar->insertWidget(m_ui->actionLock, m_searchFilter); QWidget *spacer = new QWidget(this); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); @@ -695,6 +697,23 @@ void MainWindow::displayRSSTab(bool enable) } } +void MainWindow::showFilterContextMenu(const QPoint &) +{ + const Preferences *pref = Preferences::instance(); + + QMenu *menu = m_searchFilter->createStandardContextMenu(); + menu->addSeparator(); + QAction *useRegexAct = new QAction(tr("Use regular expressions"), menu); + useRegexAct->setCheckable(true); + useRegexAct->setChecked(pref->getRegexAsFilteringPattern()); + menu->addAction(useRegexAct); + + connect(useRegexAct, &QAction::toggled, pref, &Preferences::setRegexAsFilteringPattern); + connect(useRegexAct, &QAction::toggled, this, [this]() { m_transferListWidget->applyNameFilter(m_searchFilter->text()); }); + + menu->exec(QCursor::pos()); +} + void MainWindow::displaySearchTab(bool enable) { Preferences::instance()->setSearchEnabled(enable); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index d8625779f..88ed2acd5 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -102,6 +102,7 @@ public: void showNotificationBaloon(QString title, QString msg) const; private slots: + void showFilterContextMenu(const QPoint &); void balloonClicked(); void writeSettings(); void readSettings(); diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index a4f10d515..94fa159f4 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -1188,7 +1188,9 @@ void TransferListWidget::applyTrackerFilter(const QStringList &hashes) void TransferListWidget::applyNameFilter(const QString &name) { - m_sortFilterModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive, QRegExp::WildcardUnix)); + const QRegExp::PatternSyntax patternSyntax = Preferences::instance()->getRegexAsFilteringPattern() + ? QRegExp::RegExp : QRegExp::WildcardUnix; + m_sortFilterModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive, patternSyntax)); } void TransferListWidget::applyStatusFilter(int f)