forked from qt-creator/qt-creator
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:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user