mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
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
This commit is contained in:
parent
37deaaef2c
commit
e3c03e466e
|
@ -54,6 +54,7 @@
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QRegularExpression>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
|
|
||||||
|
@ -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);
|
const QString pattern = QInputDialog::getText(m_view, title, text, QLineEdit::Normal, QStringLiteral("*"), &okClicked);
|
||||||
|
|
||||||
if (okClicked && !pattern.isEmpty()) {
|
if (okClicked && !pattern.isEmpty()) {
|
||||||
QRegExp patternRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard);
|
const QRegularExpression patternRegExp(QRegularExpression::wildcardToRegularExpression(pattern));
|
||||||
m_view->selectItems(patternRegExp, selectItems);
|
m_view->selectItems(patternRegExp, selectItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,9 @@
|
||||||
|
|
||||||
#include "kfileitemmodelfilter.h"
|
#include "kfileitemmodelfilter.h"
|
||||||
|
|
||||||
#include <KFileItem>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
#include <KFileItem>
|
||||||
|
|
||||||
KFileItemModelFilter::KFileItemModelFilter() :
|
KFileItemModelFilter::KFileItemModelFilter() :
|
||||||
m_useRegExp(false),
|
m_useRegExp(false),
|
||||||
|
@ -44,12 +45,10 @@ void KFileItemModelFilter::setPattern(const QString& filter)
|
||||||
|
|
||||||
if (filter.contains('*') || filter.contains('?') || filter.contains('[')) {
|
if (filter.contains('*') || filter.contains('?') || filter.contains('[')) {
|
||||||
if (!m_regExp) {
|
if (!m_regExp) {
|
||||||
m_regExp = new QRegExp();
|
m_regExp = new QRegularExpression();
|
||||||
m_regExp->setCaseSensitivity(Qt::CaseInsensitive);
|
m_regExp->setPatternOptions(QRegularExpression::CaseInsensitiveOption);
|
||||||
m_regExp->setMinimal(false);
|
|
||||||
m_regExp->setPatternSyntax(QRegExp::WildcardUnix);
|
|
||||||
}
|
}
|
||||||
m_regExp->setPattern(filter);
|
m_regExp->setPattern(QRegularExpression::wildcardToRegularExpression(filter));
|
||||||
m_useRegExp = m_regExp->isValid();
|
m_useRegExp = m_regExp->isValid();
|
||||||
} else {
|
} else {
|
||||||
m_useRegExp = false;
|
m_useRegExp = false;
|
||||||
|
@ -103,7 +102,7 @@ bool KFileItemModelFilter::matches(const KFileItem& item) const
|
||||||
bool KFileItemModelFilter::matchesPattern(const KFileItem& item) const
|
bool KFileItemModelFilter::matchesPattern(const KFileItem& item) const
|
||||||
{
|
{
|
||||||
if (m_useRegExp) {
|
if (m_useRegExp) {
|
||||||
return m_regExp->exactMatch(item.text());
|
return m_regExp->match(item.text()).hasMatch();
|
||||||
} else {
|
} else {
|
||||||
return item.text().toLower().contains(m_lowerCasePattern);
|
return item.text().toLower().contains(m_lowerCasePattern);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
class KFileItem;
|
class KFileItem;
|
||||||
class QRegExp;
|
class QRegularExpression;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Allows to check whether an item of the KFileItemModel
|
* @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,
|
bool m_useRegExp; // If true, m_regExp is used for filtering,
|
||||||
// otherwise m_lowerCaseFilter is used.
|
// otherwise m_lowerCaseFilter is used.
|
||||||
QRegExp* m_regExp;
|
QRegularExpression *m_regExp;
|
||||||
QString m_lowerCasePattern; // Lowercase version of m_filter for
|
QString m_lowerCasePattern; // Lowercase version of m_filter for
|
||||||
// faster comparison in matches().
|
// faster comparison in matches().
|
||||||
QString m_pattern; // Property set by setPattern().
|
QString m_pattern; // Property set by setPattern().
|
||||||
|
|
|
@ -364,7 +364,7 @@ void DolphinView::markUrlAsCurrent(const QUrl &url)
|
||||||
m_scrollToCurrentItem = true;
|
m_scrollToCurrentItem = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DolphinView::selectItems(const QRegExp& pattern, bool enabled)
|
void DolphinView::selectItems(const QRegularExpression ®exp, bool enabled)
|
||||||
{
|
{
|
||||||
const KItemListSelectionManager::SelectionMode mode = enabled
|
const KItemListSelectionManager::SelectionMode mode = enabled
|
||||||
? KItemListSelectionManager::Select
|
? KItemListSelectionManager::Select
|
||||||
|
@ -373,7 +373,7 @@ void DolphinView::selectItems(const QRegExp& pattern, bool enabled)
|
||||||
|
|
||||||
for (int index = 0; index < m_model->count(); index++) {
|
for (int index = 0; index < m_model->count(); index++) {
|
||||||
const KFileItem item = m_model->fileItem(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
|
// 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
|
// select them in one go after the loop, but we'd need a new function
|
||||||
// KItemListSelectionManager::setSelected(KItemSet, SelectionMode mode)
|
// KItemListSelectionManager::setSelected(KItemSet, SelectionMode mode)
|
||||||
|
|
|
@ -46,7 +46,7 @@ class ToolTipManager;
|
||||||
class VersionControlObserver;
|
class VersionControlObserver;
|
||||||
class ViewProperties;
|
class ViewProperties;
|
||||||
class QGraphicsSceneDragDropEvent;
|
class QGraphicsSceneDragDropEvent;
|
||||||
class QRegExp;
|
class QRegularExpression;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @short Represents a view for the directory content.
|
* @short Represents a view for the directory content.
|
||||||
|
@ -183,10 +183,16 @@ public:
|
||||||
void markUrlAsCurrent(const QUrl& url);
|
void markUrlAsCurrent(const QUrl& url);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All items that match to the pattern \a pattern will get selected
|
* All items that match the regular expression \a regexp will get selected
|
||||||
* if \a enabled is true and deselected if \a enabled is false.
|
* 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
|
* Sets the zoom level to \a level. It is assured that the used
|
||||||
|
|
Loading…
Reference in a new issue