From: Ahmad Samir Date: Tue, 24 Dec 2019 15:15:44 +0000 (+0200) Subject: Port QRegExp to QRegularExpression X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e3c03e466ea53e575752154cde4e24caea118471 Port QRegExp to QRegularExpression Summary: Port QRegExp::exactMatch() with QRegularExpression::anchoredPattern(). Port QRegExp::Wildcard with QRegularExpression::wildcardToRegularExpression(). Note that QRegularExpression::wildcardToRegularExpression() returns an anchored pattern. Test Plan: Using the filter bar in dolphin works as before. All unit tests pass, except: - kfileitemmodeltest (which is unrelated AFAICS); it fails on master too - placesitemmodeltest, which fails on master too Reviewers: #dolphin, elvisangelaccio, meven Reviewed By: #dolphin, elvisangelaccio Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D26215 --- diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 0c41b2bec..12c361011 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -507,7 +508,7 @@ void DolphinPart::openSelectionDialog(const QString& title, const QString& text, const QString pattern = QInputDialog::getText(m_view, title, text, QLineEdit::Normal, QStringLiteral("*"), &okClicked); if (okClicked && !pattern.isEmpty()) { - QRegExp patternRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard); + const QRegularExpression patternRegExp(QRegularExpression::wildcardToRegularExpression(pattern)); m_view->selectItems(patternRegExp, selectItems); } } diff --git a/src/kitemviews/private/kfileitemmodelfilter.cpp b/src/kitemviews/private/kfileitemmodelfilter.cpp index fc56cc71d..bcd875132 100644 --- a/src/kitemviews/private/kfileitemmodelfilter.cpp +++ b/src/kitemviews/private/kfileitemmodelfilter.cpp @@ -20,8 +20,9 @@ #include "kfileitemmodelfilter.h" -#include +#include +#include KFileItemModelFilter::KFileItemModelFilter() : m_useRegExp(false), @@ -44,12 +45,10 @@ void KFileItemModelFilter::setPattern(const QString& filter) if (filter.contains('*') || filter.contains('?') || filter.contains('[')) { if (!m_regExp) { - m_regExp = new QRegExp(); - m_regExp->setCaseSensitivity(Qt::CaseInsensitive); - m_regExp->setMinimal(false); - m_regExp->setPatternSyntax(QRegExp::WildcardUnix); + m_regExp = new QRegularExpression(); + m_regExp->setPatternOptions(QRegularExpression::CaseInsensitiveOption); } - m_regExp->setPattern(filter); + m_regExp->setPattern(QRegularExpression::wildcardToRegularExpression(filter)); m_useRegExp = m_regExp->isValid(); } else { m_useRegExp = false; @@ -103,7 +102,7 @@ bool KFileItemModelFilter::matches(const KFileItem& item) const bool KFileItemModelFilter::matchesPattern(const KFileItem& item) const { if (m_useRegExp) { - return m_regExp->exactMatch(item.text()); + return m_regExp->match(item.text()).hasMatch(); } else { return item.text().toLower().contains(m_lowerCasePattern); } diff --git a/src/kitemviews/private/kfileitemmodelfilter.h b/src/kitemviews/private/kfileitemmodelfilter.h index f9f588aba..b56e0ad5b 100644 --- a/src/kitemviews/private/kfileitemmodelfilter.h +++ b/src/kitemviews/private/kfileitemmodelfilter.h @@ -26,7 +26,7 @@ #include class KFileItem; -class QRegExp; +class QRegularExpression; /** * @brief Allows to check whether an item of the KFileItemModel @@ -83,7 +83,7 @@ private: bool m_useRegExp; // If true, m_regExp is used for filtering, // otherwise m_lowerCaseFilter is used. - QRegExp* m_regExp; + QRegularExpression *m_regExp; QString m_lowerCasePattern; // Lowercase version of m_filter for // faster comparison in matches(). QString m_pattern; // Property set by setPattern(). diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index f0dc17837..b433ca343 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -364,7 +364,7 @@ void DolphinView::markUrlAsCurrent(const QUrl &url) m_scrollToCurrentItem = true; } -void DolphinView::selectItems(const QRegExp& pattern, bool enabled) +void DolphinView::selectItems(const QRegularExpression ®exp, bool enabled) { const KItemListSelectionManager::SelectionMode mode = enabled ? KItemListSelectionManager::Select @@ -373,7 +373,7 @@ void DolphinView::selectItems(const QRegExp& pattern, bool enabled) for (int index = 0; index < m_model->count(); index++) { const KFileItem item = m_model->fileItem(index); - if (pattern.exactMatch(item.text())) { + if (regexp.match(item.text()).hasMatch()) { // An alternative approach would be to store the matching items in a KItemSet and // select them in one go after the loop, but we'd need a new function // KItemListSelectionManager::setSelected(KItemSet, SelectionMode mode) diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 83c5f92a4..ca0f62b23 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -46,7 +46,7 @@ class ToolTipManager; class VersionControlObserver; class ViewProperties; class QGraphicsSceneDragDropEvent; -class QRegExp; +class QRegularExpression; /** * @short Represents a view for the directory content. @@ -183,10 +183,16 @@ public: void markUrlAsCurrent(const QUrl& url); /** - * All items that match to the pattern \a pattern will get selected - * if \a enabled is true and deselected if \a enabled is false. + * All items that match the regular expression \a regexp will get selected + * if \a enabled is true and deselected if \a enabled is false. + * + * Note that to match the whole string the pattern should be anchored: + * - you can anchor the pattern with QRegularExpression::anchoredPattern() + * - if you use QRegularExpresssion::wildcardToRegularExpression(), don't use + * QRegularExpression::anchoredPattern() as the former already returns an + * anchored pattern */ - void selectItems(const QRegExp& pattern, bool enabled); + void selectItems(const QRegularExpression ®exp, bool enabled); /** * Sets the zoom level to \a level. It is assured that the used