aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/bookmarks
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2018-12-24 19:53:59 +0100
committerAndré Hartmann <aha_1980@gmx.de>2019-01-02 07:23:16 +0000
commiteb5d6904e11445a3827679463df46f8ab8ce95de (patch)
tree614fed32b69b7dc73c211d6734b1152dc00dc52c /src/plugins/bookmarks
parent9a4d6b4baae9ff736e574948721ed0eb4a9a8209 (diff)
BookmarkFilter: Allow more filtering
Allow filtering for: * fileName:lineNumber pattern * line text at bookmark Fixes: QTCREATORBUG-21771 Change-Id: I55ff2a5cb82460d5aa0dbcdbb60f87cf05f985e0 Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/bookmarks')
-rw-r--r--src/plugins/bookmarks/bookmarkfilter.cpp42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/plugins/bookmarks/bookmarkfilter.cpp b/src/plugins/bookmarks/bookmarkfilter.cpp
index c211ad0beb..a148e69955 100644
--- a/src/plugins/bookmarks/bookmarkfilter.cpp
+++ b/src/plugins/bookmarks/bookmarkfilter.cpp
@@ -50,11 +50,30 @@ QList<LocatorFilterEntry> BookmarkFilter::matchesFor(QFutureInterface<LocatorFil
if (m_manager->rowCount() == 0)
return QList<LocatorFilterEntry>();
- const QModelIndexList matches = filteredUnique(
- m_manager->match(m_manager->index(0, 0), BookmarkManager::Filename, entry, -1,
- Qt::MatchContains | Qt::MatchWrap)
- + m_manager->match(m_manager->index(0, 0), BookmarkManager::Note, entry, -1,
- Qt::MatchContains | Qt::MatchWrap));
+ auto match = [this](const QString &name, BookmarkManager::Roles role) {
+ return m_manager->match(m_manager->index(0, 0), role, name, -1,
+ Qt::MatchContains | Qt::MatchWrap);
+ };
+
+ int colonIndex = entry.lastIndexOf(':');
+ QModelIndexList fileNameLineNumberMatches;
+ if (colonIndex >= 0) {
+ // Filter by "fileName:lineNumber" pattern
+ const QString fileName = entry.left(colonIndex);
+ const QString lineNumber = entry.mid(colonIndex + 1);
+ fileNameLineNumberMatches = match(fileName, BookmarkManager::Filename);
+ fileNameLineNumberMatches =
+ Utils::filtered(fileNameLineNumberMatches, [lineNumber](const QModelIndex &index) {
+ return index.data(BookmarkManager::LineNumber).toString().contains(lineNumber);
+ });
+ }
+
+ const QModelIndexList matches = filteredUnique(fileNameLineNumberMatches
+ + match(entry, BookmarkManager::Filename)
+ + match(entry, BookmarkManager::LineNumber)
+ + match(entry, BookmarkManager::Note)
+ + match(entry, BookmarkManager::LineText));
+
QList<LocatorFilterEntry> entries;
for (const QModelIndex &idx : matches) {
const Bookmark *bookmark = m_manager->bookmarkForIndex(idx);
@@ -76,6 +95,19 @@ QList<LocatorFilterEntry> BookmarkFilter::matchesFor(QFutureInterface<LocatorFil
if (highlightIndex >= 0) {
filterEntry.highlightInfo = {highlightIndex, entry.length(),
LocatorFilterEntry::HighlightInfo::ExtraInfo};
+ } else if (colonIndex >= 0) {
+ const QString fileName = entry.left(colonIndex);
+ const QString lineNumber = entry.mid(colonIndex + 1);
+ highlightIndex = filterEntry.displayName.indexOf(fileName, 0, Qt::CaseInsensitive);
+ if (highlightIndex >= 0) {
+ filterEntry.highlightInfo = {highlightIndex, fileName.length()};
+ highlightIndex = filterEntry.displayName.indexOf(
+ lineNumber, highlightIndex, Qt::CaseInsensitive);
+ if (highlightIndex >= 0) {
+ filterEntry.highlightInfo.starts += highlightIndex;
+ filterEntry.highlightInfo.lengths += lineNumber.length();
+ }
+ }
}
}