mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-11-27 03:39:39 +03:00
Merge pull request #9314 from thalieht/searchregexfilter
Add option to use regexps in the search job's search filter's context menu
This commit is contained in:
commit
93f9b3de8b
6 changed files with 42 additions and 8 deletions
|
@ -1429,6 +1429,16 @@ void Preferences::setSearchTabHeaderState(const QByteArray &state)
|
|||
setValue("SearchTab/qt5/HeaderState", state);
|
||||
}
|
||||
|
||||
bool Preferences::getRegexAsFilteringPatternForSearchJob() const
|
||||
{
|
||||
return value("SearchTab/UseRegexAsFilteringPattern", false).toBool();
|
||||
}
|
||||
|
||||
void Preferences::setRegexAsFilteringPatternForSearchJob(const bool checked)
|
||||
{
|
||||
setValue("SearchTab/UseRegexAsFilteringPattern", checked);
|
||||
}
|
||||
|
||||
QStringList Preferences::getSearchEngDisabled() const
|
||||
{
|
||||
return value("SearchEngines/disabledEngines").toStringList();
|
||||
|
@ -1519,12 +1529,12 @@ void Preferences::setTransHeaderState(const QByteArray &state)
|
|||
setValue("TransferList/qt5/HeaderState", state);
|
||||
}
|
||||
|
||||
bool Preferences::getRegexAsFilteringPattern() const
|
||||
bool Preferences::getRegexAsFilteringPatternForTransferList() const
|
||||
{
|
||||
return value("TransferList/UseRegexAsFilteringPattern", false).toBool();
|
||||
}
|
||||
|
||||
void Preferences::setRegexAsFilteringPattern(const bool checked)
|
||||
void Preferences::setRegexAsFilteringPatternForTransferList(const bool checked)
|
||||
{
|
||||
setValue("TransferList/UseRegexAsFilteringPattern", checked);
|
||||
}
|
||||
|
|
|
@ -342,6 +342,8 @@ public:
|
|||
void setRssMainSplitterState(const QByteArray &state);
|
||||
QByteArray getSearchTabHeaderState() const;
|
||||
void setSearchTabHeaderState(const QByteArray &state);
|
||||
bool getRegexAsFilteringPatternForSearchJob() const;
|
||||
void setRegexAsFilteringPatternForSearchJob(bool checked);
|
||||
QStringList getSearchEngDisabled() const;
|
||||
void setSearchEngDisabled(const QStringList &engines);
|
||||
QString getTorImportLastContentDir() const;
|
||||
|
@ -356,8 +358,8 @@ public:
|
|||
void setTransSelFilter(const int &index);
|
||||
QByteArray getTransHeaderState() const;
|
||||
void setTransHeaderState(const QByteArray &state);
|
||||
bool getRegexAsFilteringPattern() const;
|
||||
void setRegexAsFilteringPattern(bool checked);
|
||||
bool getRegexAsFilteringPatternForTransferList() const;
|
||||
void setRegexAsFilteringPatternForTransferList(bool checked);
|
||||
int getToolbarTextPosition() const;
|
||||
void setToolbarTextPosition(const int position);
|
||||
|
||||
|
|
|
@ -710,10 +710,10 @@ void MainWindow::showFilterContextMenu(const QPoint &)
|
|||
menu->addSeparator();
|
||||
QAction *useRegexAct = new QAction(tr("Use regular expressions"), menu);
|
||||
useRegexAct->setCheckable(true);
|
||||
useRegexAct->setChecked(pref->getRegexAsFilteringPattern());
|
||||
useRegexAct->setChecked(pref->getRegexAsFilteringPatternForTransferList());
|
||||
menu->addAction(useRegexAct);
|
||||
|
||||
connect(useRegexAct, &QAction::toggled, pref, &Preferences::setRegexAsFilteringPattern);
|
||||
connect(useRegexAct, &QAction::toggled, pref, &Preferences::setRegexAsFilteringPatternForTransferList);
|
||||
connect(useRegexAct, &QAction::toggled, this, [this]() { m_transferListWidget->applyNameFilter(m_searchFilter->text()); });
|
||||
|
||||
menu->exec(QCursor::pos());
|
||||
|
|
|
@ -131,6 +131,8 @@ SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, QWidget *parent)
|
|||
m_lineEditSearchResultsFilter = new LineEdit(this);
|
||||
m_lineEditSearchResultsFilter->setFixedWidth(Utils::Gui::scaledSize(this, 170));
|
||||
m_lineEditSearchResultsFilter->setPlaceholderText(tr("Filter search results..."));
|
||||
m_lineEditSearchResultsFilter->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(m_lineEditSearchResultsFilter, &QWidget::customContextMenuRequested, this, &SearchJobWidget::showFilterContextMenu);
|
||||
m_ui->horizontalLayout->insertWidget(0, m_lineEditSearchResultsFilter);
|
||||
|
||||
connect(m_lineEditSearchResultsFilter, &LineEdit::textChanged, this, &SearchJobWidget::filterSearchResults);
|
||||
|
@ -342,10 +344,29 @@ void SearchJobWidget::fillFilterComboBoxes()
|
|||
|
||||
void SearchJobWidget::filterSearchResults(const QString &name)
|
||||
{
|
||||
m_proxyModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive));
|
||||
const QRegExp::PatternSyntax patternSyntax = Preferences::instance()->getRegexAsFilteringPatternForSearchJob()
|
||||
? QRegExp::RegExp : QRegExp::WildcardUnix;
|
||||
m_proxyModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive, patternSyntax));
|
||||
updateResultsCount();
|
||||
}
|
||||
|
||||
void SearchJobWidget::showFilterContextMenu(const QPoint &)
|
||||
{
|
||||
const Preferences *pref = Preferences::instance();
|
||||
|
||||
QMenu *menu = m_lineEditSearchResultsFilter->createStandardContextMenu();
|
||||
menu->addSeparator();
|
||||
QAction *useRegexAct = new QAction(tr("Use regular expressions"), menu);
|
||||
useRegexAct->setCheckable(true);
|
||||
useRegexAct->setChecked(pref->getRegexAsFilteringPatternForSearchJob());
|
||||
menu->addAction(useRegexAct);
|
||||
|
||||
connect(useRegexAct, &QAction::toggled, pref, &Preferences::setRegexAsFilteringPatternForSearchJob);
|
||||
connect(useRegexAct, &QAction::toggled, this, [this]() { filterSearchResults(m_lineEditSearchResultsFilter->text()); });
|
||||
|
||||
menu->exec(QCursor::pos());
|
||||
}
|
||||
|
||||
QString SearchJobWidget::statusText(SearchJobWidget::Status st)
|
||||
{
|
||||
switch (st) {
|
||||
|
|
|
@ -96,6 +96,7 @@ private:
|
|||
void saveSettings() const;
|
||||
void updateFilter();
|
||||
void filterSearchResults(const QString &name);
|
||||
void showFilterContextMenu(const QPoint &);
|
||||
void displayToggleColumnsMenu(const QPoint&);
|
||||
void onItemDoubleClicked(const QModelIndex &index);
|
||||
void searchFinished(bool cancelled);
|
||||
|
|
|
@ -1188,7 +1188,7 @@ void TransferListWidget::applyTrackerFilter(const QStringList &hashes)
|
|||
|
||||
void TransferListWidget::applyNameFilter(const QString &name)
|
||||
{
|
||||
const QRegExp::PatternSyntax patternSyntax = Preferences::instance()->getRegexAsFilteringPattern()
|
||||
const QRegExp::PatternSyntax patternSyntax = Preferences::instance()->getRegexAsFilteringPatternForTransferList()
|
||||
? QRegExp::RegExp : QRegExp::WildcardUnix;
|
||||
m_sortFilterModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive, patternSyntax));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue