diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2018-12-24 19:53:59 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2019-01-02 07:23:16 +0000 |
commit | eb5d6904e11445a3827679463df46f8ab8ce95de (patch) | |
tree | 614fed32b69b7dc73c211d6734b1152dc00dc52c /src/plugins/bookmarks | |
parent | 9a4d6b4baae9ff736e574948721ed0eb4a9a8209 (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.cpp | 42 |
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(); + } + } } } |