TextEditor: modernize highlighting search results

Change-Id: I365a09dfd9d371119044da5567a1adb397f3ac93
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
David Schulz
2023-10-11 13:33:34 +02:00
parent da03156259
commit eda0dbd8dd

View File

@@ -681,8 +681,6 @@ public:
void documentAboutToBeReloaded(); void documentAboutToBeReloaded();
void documentReloadFinished(bool success); void documentReloadFinished(bool success);
void highlightSearchResultsSlot(const QString &txt, FindFlags findFlags); void highlightSearchResultsSlot(const QString &txt, FindFlags findFlags);
void searchResultsReady(int beginIndex, int endIndex);
void searchFinished();
void setupScrollBar(); void setupScrollBar();
void highlightSearchResultsInScrollBar(); void highlightSearchResultsInScrollBar();
void scheduleUpdateHighlightScrollBar(); void scheduleUpdateHighlightScrollBar();
@@ -872,7 +870,7 @@ public:
QScopedPointer<AutoCompleter> m_autoCompleter; QScopedPointer<AutoCompleter> m_autoCompleter;
CommentDefinition m_commentDefinition; CommentDefinition m_commentDefinition;
QFutureWatcher<SearchResultItems> *m_searchWatcher = nullptr; QFuture<SearchResultItems> m_searchFuture;
QVector<SearchResult> m_searchResults; QVector<SearchResult> m_searchResults;
QTimer m_scrollBarUpdateTimer; QTimer m_scrollBarUpdateTimer;
HighlightScrollBarController *m_highlightScrollBarController = nullptr; HighlightScrollBarController *m_highlightScrollBarController = nullptr;
@@ -1139,6 +1137,8 @@ TextEditorWidgetPrivate::~TextEditorWidgetPrivate()
q->disconnect(this); q->disconnect(this);
delete m_toolBarWidget; delete m_toolBarWidget;
delete m_highlightScrollBarController; delete m_highlightScrollBarController;
if (m_searchFuture.isRunning())
m_searchFuture.cancel();
} }
static QFrame *createSeparator(const QString &styleSheet) static QFrame *createSeparator(const QString &styleSheet)
@@ -6847,27 +6847,6 @@ void TextEditorWidgetPrivate::highlightSearchResultsSlot(const QString &txt, Fin
m_scrollBarUpdateTimer.start(50); m_scrollBarUpdateTimer.start(50);
} }
void TextEditorWidgetPrivate::searchResultsReady(int beginIndex, int endIndex)
{
QVector<SearchResult> results;
for (int index = beginIndex; index < endIndex; ++index) {
const SearchResultItems resultList = m_searchWatcher->resultAt(index);
for (const SearchResultItem &result : resultList) {
SearchResult searchResult;
if (q->inFindScope(selectRange(q->document(), result.mainRange(), &searchResult)))
results << searchResult;
}
}
m_searchResults << results;
addSearchResultsToScrollBar(results);
}
void TextEditorWidgetPrivate::searchFinished()
{
delete m_searchWatcher;
m_searchWatcher = nullptr;
}
void TextEditorWidgetPrivate::adjustScrollBarRanges() void TextEditorWidgetPrivate::adjustScrollBarRanges()
{ {
if (!m_highlightScrollBarController) if (!m_highlightScrollBarController)
@@ -6888,12 +6867,8 @@ void TextEditorWidgetPrivate::highlightSearchResultsInScrollBar()
m_highlightScrollBarController->removeHighlights(Constants::SCROLL_BAR_SEARCH_RESULT); m_highlightScrollBarController->removeHighlights(Constants::SCROLL_BAR_SEARCH_RESULT);
m_searchResults.clear(); m_searchResults.clear();
if (m_searchWatcher) { if (m_searchFuture.isRunning())
m_searchWatcher->disconnect(); m_searchFuture.cancel();
m_searchWatcher->cancel();
m_searchWatcher->deleteLater();
m_searchWatcher = nullptr;
}
const QString &txt = m_findText; const QString &txt = m_findText;
if (txt.isEmpty()) if (txt.isEmpty())
@@ -6901,14 +6876,21 @@ void TextEditorWidgetPrivate::highlightSearchResultsInScrollBar()
adjustScrollBarRanges(); adjustScrollBarRanges();
m_searchWatcher = new QFutureWatcher<SearchResultItems>; m_searchFuture = Utils::asyncRun(Utils::searchInContents,
connect(m_searchWatcher, &QFutureWatcher<SearchResultItems>::resultsReadyAt, txt,
this, &TextEditorWidgetPrivate::searchResultsReady); m_findFlags,
connect(m_searchWatcher, &QFutureWatcher<SearchResultItems>::finished, m_document->filePath(),
this, &TextEditorWidgetPrivate::searchFinished); m_document->plainText());
m_searchWatcher->setPendingResultsLimit(10); Utils::onResultReady(m_searchFuture, this, [this](const SearchResultItems &resultList) {
m_searchWatcher->setFuture(Utils::asyncRun(Utils::searchInContents, txt, m_findFlags, QList<SearchResult> results;
m_document->filePath(), m_document->plainText())); for (const SearchResultItem &result : resultList) {
SearchResult searchResult;
if (q->inFindScope(selectRange(q->document(), result.mainRange(), &searchResult)))
results << searchResult;
}
m_searchResults << results;
addSearchResultsToScrollBar(results);
});
} }
void TextEditorWidgetPrivate::scheduleUpdateHighlightScrollBar() void TextEditorWidgetPrivate::scheduleUpdateHighlightScrollBar()