highlight search words improved

This commit is contained in:
Zira project 2020-12-22 18:41:11 +05:00
parent 1d2f91355a
commit 5cd34114b4
2 changed files with 33 additions and 27 deletions

View File

@ -153,6 +153,7 @@ protected:
void highlightPHPOpenSpecialTagPair(QString tagName, int pos, QList<QTextEdit::ExtraSelection> * extraSelections);
void highlightCurrentLine(QList<QTextEdit::ExtraSelection> * extraSelections);
void highlightMultiSelection(QList<QTextEdit::ExtraSelection> * extraSelections);
void highlightSearchWords(QList<QTextEdit::ExtraSelection> * extraSelections);
void showCompletePopup();
void hideCompletePopup();
void detectCompleteText(QString text, QChar cursorTextPrevChar, int cursorTextPos, std::string mode, int state);

View File

@ -5087,6 +5087,7 @@ void Editor::cursorPositionChanged()
QList<QTextEdit::ExtraSelection> extraSelections;
if (!isReadOnly()) {
highlightCurrentLine(& extraSelections);
highlightSearchWords(& extraSelections);
}
setExtraSelections(extraSelections);
lineAnnotation->hide();
@ -6270,6 +6271,36 @@ void Editor::highlightMultiSelection(QList<QTextEdit::ExtraSelection> * extraSel
}
}
void Editor::highlightSearchWords(QList<QTextEdit::ExtraSelection> *extraSelections)
{
if (!search->isVisible() || searchString.size() == 0) return;
static_cast<LineMap *>(lineMap)->clearMarks();
QTextCursor searchWordCursor(document());
QTextDocument::FindFlags findFlags = nullptr;
if (searchCaSe) findFlags |= QTextDocument::FindCaseSensitively;
if (searchWord) findFlags |= QTextDocument::FindWholeWords;
searchWordCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
int searchWordBlockNumber = -1;
int co = 0;
while(!searchWordCursor.isNull() && !searchWordCursor.atEnd()) {
if (!searchRegE) searchWordCursor = document()->find(searchString, searchWordCursor, findFlags);
else searchWordCursor = document()->find(QRegularExpression(searchString), searchWordCursor, findFlags);
if (!searchWordCursor.isNull()) {
QTextEdit::ExtraSelection selectedWordSelection;
selectedWordSelection.format.setBackground(searchWordBgColor);
selectedWordSelection.format.setForeground(searchWordColor);
selectedWordSelection.cursor = searchWordCursor;
extraSelections->append(selectedWordSelection);
if (searchWordBlockNumber != searchWordCursor.block().blockNumber()) {
searchWordBlockNumber = searchWordCursor.block().blockNumber();
static_cast<LineMap *>(lineMap)->addMark(searchWordBlockNumber+1);
}
}
co++;
if (co >= SEARCH_LIMIT) break; // too much results
}
}
void Editor::highlightExtras(QChar prevChar, QChar nextChar, QChar cursorTextPrevChar, QString cursorText, int cursorTextPos, std::string mode)
{
QList<QTextEdit::ExtraSelection> extraSelections;
@ -6308,33 +6339,7 @@ void Editor::highlightExtras(QChar prevChar, QChar nextChar, QChar cursorTextPre
}
}
// search words
if (search->isVisible() && searchString.size() > 0) {
static_cast<LineMap *>(lineMap)->clearMarks();
QTextCursor searchWordCursor(document());
QTextDocument::FindFlags findFlags = nullptr;
if (searchCaSe) findFlags |= QTextDocument::FindCaseSensitively;
if (searchWord) findFlags |= QTextDocument::FindWholeWords;
searchWordCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
int searchWordBlockNumber = -1;
int co = 0;
while(!searchWordCursor.isNull() && !searchWordCursor.atEnd()) {
if (!searchRegE) searchWordCursor = document()->find(searchString, searchWordCursor, findFlags);
else searchWordCursor = document()->find(QRegularExpression(searchString), searchWordCursor, findFlags);
if (!searchWordCursor.isNull()) {
QTextEdit::ExtraSelection selectedWordSelection;
selectedWordSelection.format.setBackground(searchWordBgColor);
selectedWordSelection.format.setForeground(searchWordColor);
selectedWordSelection.cursor = searchWordCursor;
extraSelections.append(selectedWordSelection);
if (searchWordBlockNumber != searchWordCursor.block().blockNumber()) {
searchWordBlockNumber = searchWordCursor.block().blockNumber();
static_cast<LineMap *>(lineMap)->addMark(searchWordBlockNumber+1);
}
}
co++;
if (co >= SEARCH_LIMIT) break; // too much results
}
}
highlightSearchWords(& extraSelections);
// multiselect
highlightMultiSelection(& extraSelections);