--- a/src/eric7/QScintilla/MiniEditor.py Mon Mar 27 22:05:05 2023 +0200 +++ b/src/eric7/QScintilla/MiniEditor.py Tue Mar 28 10:14:23 2023 +0200 @@ -281,6 +281,10 @@ self.__textEdit = MiniScintilla(self) self.__textEdit.clearSearchIndicators = self.clearSearchIndicators self.__textEdit.setSearchIndicator = self.setSearchIndicator + self.__textEdit.highlightSearchSelection = self.highlightSearchSelection + self.__textEdit.clearSearchSelectionHighlight = ( + self.clearSearchSelectionHighlight + ) self.__textEdit.setUtf8(True) self.getCursorPosition = self.__textEdit.getCursorPosition @@ -294,8 +298,7 @@ self.__lastLine = 0 self.srHistory = {"search": [], "replace": []} - self.__searchWidget = SearchReplaceWidget(False, self, self) - self.__replaceWidget = SearchReplaceWidget(True, self, self) + self.__searchReplaceWidget = SearchReplaceWidget(self, self) self.__sourceOutline = EditorOutlineView(self, populate=False) self.__sourceOutline.setMaximumWidth( @@ -312,12 +315,10 @@ layout = QVBoxLayout() layout.setContentsMargins(1, 1, 1, 1) layout.addLayout(hlayout) - layout.addWidget(self.__searchWidget) - layout.addWidget(self.__replaceWidget) + layout.addWidget(self.__searchReplaceWidget) centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) - self.__searchWidget.hide() - self.__replaceWidget.hide() + self.__searchReplaceWidget.hide() self.lexer_ = None self.apiLanguage = "" @@ -361,10 +362,7 @@ self.__textEdit.customContextMenuRequested.connect(self.__contextMenuRequested) self.__textEdit.selectionChanged.connect( - lambda: self.__searchWidget.selectionChanged(self.__textEdit) - ) - self.__textEdit.selectionChanged.connect( - lambda: self.__replaceWidget.selectionChanged(self.__textEdit) + lambda: self.__searchReplaceWidget.selectionChanged(self.__textEdit) ) if filename: @@ -2692,7 +2690,9 @@ """ search text and options are reused.</p>""", ) ) - self.replaceAndSearchAct.triggered.connect(self.__replaceWidget.replaceSearch) + self.replaceAndSearchAct.triggered.connect( + self.__searchReplaceWidget.replaceSearch + ) self.searchActions.append(self.replaceAndSearchAct) self.replaceSelectionAct = EricAction( @@ -2719,7 +2719,7 @@ """ current editor.</p>""", ) ) - self.replaceSelectionAct.triggered.connect(self.__replaceWidget.replace) + self.replaceSelectionAct.triggered.connect(self.__searchReplaceWidget.replace) self.searchActions.append(self.replaceSelectionAct) self.replaceAllAct = EricAction( @@ -2746,7 +2746,7 @@ """ editor.</p>""", ) ) - self.replaceAllAct.triggered.connect(self.__replaceWidget.replaceAll) + self.replaceAllAct.triggered.connect(self.__searchReplaceWidget.replaceAll) self.searchActions.append(self.replaceAllAct) def __createViewActions(self): @@ -3587,6 +3587,13 @@ Preferences.getEditorColour("SearchMarkers"), ) + self.searchSelectionIndicator = QsciScintilla.INDIC_CONTAINER + 1 + self.__textEdit.indicatorDefine( + self.searchSelectionIndicator, + QsciScintilla.INDIC_FULLBOX, + Preferences.getEditorColour("SearchSelectionMarker"), + ) + self.__textEdit.setCursorFlashTime(QApplication.cursorFlashTime()) if Preferences.getEditor("OverrideEditAreaColours"): @@ -4142,34 +4149,25 @@ """ Public method to show the search widget. """ - self.__replaceWidget.hide() - self.__searchWidget.show() - self.__searchWidget.show(self.textForFind()) + self.__searchReplaceWidget.show(text=self.textForFind(), replaceMode=False) def __searchNext(self): """ Private slot to handle the search next action. """ - if self.__replaceWidget.isVisible(): - self.__replaceWidget.findNext() - else: - self.__searchWidget.findNext() + self.__searchReplaceWidget.findNext() def __searchPrev(self): """ Private slot to handle the search previous action. """ - if self.__replaceWidget.isVisible(): - self.__replaceWidget.findPrev() - else: - self.__searchWidget.findPrev() + self.__searchReplaceWidget.findPrev() def showReplaceWidget(self): """ Public method to show the replace widget. """ - self.__searchWidget.hide() - self.__replaceWidget.show(self.textForFind()) + self.__searchReplaceWidget.show(text=self.textForFind(), replaceMode=True) def __searchClearMarkers(self): """ @@ -4201,6 +4199,29 @@ self.__textEdit.clearAllIndicators(self.searchIndicator) self.__markedText = "" + def highlightSearchSelection(self, startLine, startIndex, endLine, endIndex): + """ + Public method to set a highlight for the selection at the start of a search. + + @param startLine line of the selection start + @type int + @param startIndex index of the selection start + @type int + @param endLine line of the selection end + @type int + @param endIndex index of the selection end + @type int + """ + self.__textEdit.setIndicator( + self.searchSelectionIndicator, startLine, startIndex, endLine, endIndex + ) + + def clearSearchSelectionHighlight(self): + """ + Public method to clear all highlights. + """ + self.__textEdit.clearAllIndicators(self.searchSelectionIndicator) + def __markOccurrences(self): """ Private method to mark all occurrences of the current word.