forked from qt-creator/qt-creator
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>
This commit is contained in:
committed by
André Hartmann
parent
9a4d6b4baa
commit
eb5d6904e1
@@ -50,11 +50,30 @@ QList<LocatorFilterEntry> BookmarkFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
if (m_manager->rowCount() == 0)
|
if (m_manager->rowCount() == 0)
|
||||||
return QList<LocatorFilterEntry>();
|
return QList<LocatorFilterEntry>();
|
||||||
|
|
||||||
const QModelIndexList matches = filteredUnique(
|
auto match = [this](const QString &name, BookmarkManager::Roles role) {
|
||||||
m_manager->match(m_manager->index(0, 0), BookmarkManager::Filename, entry, -1,
|
return m_manager->match(m_manager->index(0, 0), role, name, -1,
|
||||||
Qt::MatchContains | Qt::MatchWrap)
|
Qt::MatchContains | Qt::MatchWrap);
|
||||||
+ m_manager->match(m_manager->index(0, 0), BookmarkManager::Note, entry, -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;
|
QList<LocatorFilterEntry> entries;
|
||||||
for (const QModelIndex &idx : matches) {
|
for (const QModelIndex &idx : matches) {
|
||||||
const Bookmark *bookmark = m_manager->bookmarkForIndex(idx);
|
const Bookmark *bookmark = m_manager->bookmarkForIndex(idx);
|
||||||
@@ -76,6 +95,19 @@ QList<LocatorFilterEntry> BookmarkFilter::matchesFor(QFutureInterface<LocatorFil
|
|||||||
if (highlightIndex >= 0) {
|
if (highlightIndex >= 0) {
|
||||||
filterEntry.highlightInfo = {highlightIndex, entry.length(),
|
filterEntry.highlightInfo = {highlightIndex, entry.length(),
|
||||||
LocatorFilterEntry::HighlightInfo::ExtraInfo};
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user