src/eric7/QScintilla/SearchReplaceWidget.py

branch
eric7
changeset 10467
b3929f6748ae
parent 10439
21c28b0f9e41
child 10482
72d9b5ea39b4
diff -r 19ae02bd4bc0 -r b3929f6748ae src/eric7/QScintilla/SearchReplaceWidget.py
--- a/src/eric7/QScintilla/SearchReplaceWidget.py	Tue Jan 02 11:53:10 2024 +0100
+++ b/src/eric7/QScintilla/SearchReplaceWidget.py	Tue Jan 02 14:06:09 2024 +0100
@@ -1253,12 +1253,13 @@
         self.replacetextCombo.clear()
         self.replacetextCombo.addItems(self.__replaceHistory)
 
+        selectionOnly = self.selectionCheckBox.isChecked()
+
         aw = self.__viewmanager.activeWindow()
         aw.hideFindIndicator()
         cline, cindex = aw.getCursorPosition()
-        boundary = self.__selectionBoundary()
-        if self.selectionCheckBox.isChecked():
-            line, index = boundary[:2]
+        if selectionOnly:
+            boundary = self.__selectionBoundary()
             aw.highlightSearchSelection(*boundary)
         else:
             line = 0
@@ -1274,80 +1275,30 @@
         if self.escapeCheckBox.isChecked():
             ftxt = Utilities.unslash(ftxt)
 
-        ok = aw.findFirst(
-            ftxt,
-            self.regexpCheckBox.isChecked(),
-            self.caseCheckBox.isChecked(),
-            self.wordCheckBox.isChecked(),
-            False,
-            True,
-            line,
-            index,
-            posix=posixMode,
-            cxx11=cxx11Mode,
-        )
-
-        if ok and self.selectionCheckBox.isChecked():
-            lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
-            if len(self.__selections) > 1:
-                for sel in self.__selections:
-                    if lineFrom == sel[0] and indexFrom >= sel[1] and indexTo <= sel[3]:
-                        ok = True
-                        break
-                else:
-                    ok = False
-            elif (
-                (lineFrom == boundary[0] and indexFrom >= boundary[1])
-                or (lineFrom > boundary[0] and lineFrom < boundary[2])
-                or (lineFrom == boundary[2] and indexFrom <= boundary[3])
-            ):
-                ok = True
-            else:
-                ok = False
-            if not ok and len(self.__selections) > 1:
-                # try again
-                while not ok and lineFrom <= boundary[2]:
-                    for ind in range(len(self.__selections)):
-                        if lineFrom == self.__selections[ind][0]:
-                            after = indexTo > self.__selections[ind][3]
-                            if after:
-                                if ind < len(self.__selections) - 1:
-                                    line, index = self.__selections[ind + 1][:2]
-                            else:
-                                line, index = self.__selections[ind][:2]
-                        break
-                    else:
-                        break
-                    ok = aw.findFirst(
-                        ftxt,
-                        self.regexpCheckBox.isChecked(),
-                        self.caseCheckBox.isChecked(),
-                        self.wordCheckBox.isChecked(),
-                        False,
-                        True,
-                        line,
-                        index,
-                        posix=posixMode,
-                        cxx11=cxx11Mode,
-                    )
-                    if ok:
-                        lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
-                        if (
-                            lineFrom < boundary[0]
-                            or lineFrom > boundary[2]
-                            or indexFrom < boundary[1]
-                            or indexFrom > boundary[3]
-                            or indexTo < boundary[1]
-                            or indexTo > boundary[3]
-                        ):
-                            ok = False
-                            break
-
-            if not ok:
-                aw.selectAll(False)
-                aw.setCursorPosition(cline, cindex)
-                aw.ensureCursorVisible()
-
+        if selectionOnly:
+            ok = aw.findFirstInSelection(
+                ftxt,
+                self.regexpCheckBox.isChecked(),
+                self.caseCheckBox.isChecked(),
+                self.wordCheckBox.isChecked(),
+                False,
+                True,
+                posix=posixMode,
+                cxx11=cxx11Mode,
+            )
+        else:
+            ok = aw.findFirst(
+                ftxt,
+                self.regexpCheckBox.isChecked(),
+                self.caseCheckBox.isChecked(),
+                self.wordCheckBox.isChecked(),
+                False,
+                True,
+                line,
+                index,
+                posix=posixMode,
+                cxx11=cxx11Mode,
+            )
         found = ok
 
         aw.beginUndoAction()
@@ -1359,7 +1310,10 @@
         while ok:
             aw.replace(rtxt)
             replacements += 1
-            ok = self.__findNextPrev(ftxt, self.__findBackwards)
+            if selectionOnly:
+                ok = self.__findNextPrev(ftxt, self.__findBackwards)
+            else:
+                ok = aw.findNext()
             self.__finding = True
         aw.endUndoAction()
         if wordWrap:

eric ide

mercurial