src/eric7/QScintilla/MiniEditor.py

branch
eric7
changeset 9938
b8005dd4fc9b
parent 9695
ad962e9b904d
child 9977
a5acf678c367
diff -r a56c297bfd61 -r b8005dd4fc9b src/eric7/QScintilla/MiniEditor.py
--- 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.

eric ide

mercurial