diff --git a/app/src/gambas3/.lang/.pot b/app/src/gambas3/.lang/.pot index 27d357445..933403c9a 100644 --- a/app/src/gambas3/.lang/.pot +++ b/app/src/gambas3/.lang/.pot @@ -422,7 +422,7 @@ msgstr "" #: FPasteTable.form:107 FPropertyComponent.form:221 FPropertyProject.form:745 #: FProxy.form:57 FReportBorderChooser.form:48 FReportBrushChooser.form:34 #: FReportCoordChooser.form:26 FReportPaddingChooser.form:75 FSave.form:28 -#: FSaveProjectAs.form:76 FSearch.class:847 FSelectExtraFile.form:43 +#: FSaveProjectAs.form:76 FSearch.class:864 FSelectExtraFile.form:43 #: FSelectIcon.form:86 FSnippet.form:57 FTableChooser.form:68 FText.form:41 #: FTextEditor.class:597 FTranslate.class:627 Project.module:440 msgid "Cancel" @@ -1336,7 +1336,7 @@ msgstr "" msgid "Show search window" msgstr "" -#: FDebugInfo.form:303 FSearch.class:468 FTranslate.class:588 +#: FDebugInfo.form:303 FSearch.class:485 FTranslate.class:588 msgid "Search string cannot be found." msgstr "" @@ -4042,23 +4042,23 @@ msgstr "" msgid "Replace &all" msgstr "" -#: FSearch.class:470 +#: FSearch.class:487 msgid "Search string replaced once." msgstr "" -#: FSearch.class:472 +#: FSearch.class:489 msgid "Search string replaced &1 times." msgstr "" -#: FSearch.class:717 +#: FSearch.class:734 msgid "One match" msgstr "" -#: FSearch.class:719 +#: FSearch.class:736 msgid "&1 matches" msgstr "" -#: FSearch.class:847 +#: FSearch.class:864 msgid "Do you really want to replace every string?" msgstr "" diff --git a/app/src/gambas3/.src/Search/FSearch.class b/app/src/gambas3/.src/Search/FSearch.class index 223a2337d..8f338f119 100644 --- a/app/src/gambas3/.src/Search/FSearch.class +++ b/app/src/gambas3/.src/Search/FSearch.class @@ -392,6 +392,7 @@ Private Sub Run(iAction As Integer) Dim iTry As Integer Dim nReplace As Integer Dim hEditor As FEditor + Dim iLastPos As Integer If InitSearch() Then Return ResetBrowse @@ -404,62 +405,78 @@ Private Sub Run(iAction As Integer) Endif aResult = GrepFile($hCurrent) - -DO_IT_AGAIN: - iCurrentPos = $hCurrent.GetPosition() - - If iAction And DO_REPLACE And If nReplace = 0 Then - If iAction And GO_BACKWARD Then - Inc iCurrentPos - Else - Dec iCurrentPos - Endif - Endif - - If aResult.Count Then - - For iTry = 1 To aResult.Count + If iAction And DO_REPLACE And If iAction And DO_ALL Then + Try $hCurrent.Editor.Begin + While aResult.Count + If $hCurrent.SetPosition(aResult[0], False) Then Break + Inc nReplace + $hCurrent.Replace(ReplaceString) + DoReplace(aResult, 0, ReplaceString) + Wend + Try $hCurrent.Editor.End + + Else + + iCurrentPos = $hCurrent.GetPosition() + iLastPos = iCurrentPos + + If Not $hCurrent.GetSelection() Or If iAction And DO_REPLACE Then If iAction And GO_BACKWARD Then - - For iInd = aResult.Max To 0 Step -1 - iPos = aResult[iInd].Pos - If iPos < iCurrentPos Then Break - Next - - If iPos >= iCurrentPos Then - iInd = aResult.Max - iPos = aResult[iInd].Pos - Endif - + Inc iCurrentPos Else - - For iInd = 0 To aResult.Max - iPos = aResult[iInd].Pos - If iPos > iCurrentPos Then Break - Next - - If iPos <= iCurrentPos Then - iInd = 0 - iPos = aResult[iInd].Pos - Endif - + Dec iCurrentPos Endif + Endif + + If aResult.Count Then - If Not $hCurrent.SetPosition(aResult[iInd], False) Then - If iAction And DO_REPLACE Then + For iTry = 1 To aResult.Count + + If iAction And GO_BACKWARD Then + + For iInd = aResult.Max To 0 Step -1 + iPos = aResult[iInd].Pos + If iPos < iCurrentPos Then Break + Next + + If iPos >= iCurrentPos Then + iInd = aResult.Max + iPos = aResult[iInd].Pos + Endif + + Else + + For iInd = 0 To aResult.Max + iPos = aResult[iInd].Pos + If iPos > iCurrentPos Then Break + Next + + If iPos <= iCurrentPos Then + iInd = 0 + iPos = aResult[iInd].Pos + Endif + + Endif + + If $hCurrent.SetPosition(aResult[iInd], False) Then Goto FIND_NEXT + + If iAction And DO_REPLACE And If iPos = iLastPos Then $hCurrent.Replace(ReplaceString) DoReplace(aResult, iInd, ReplaceString) + iAction = iAction And Not DO_REPLACE + Else + Return Endif - Inc nReplace - If (iAction And DO_ALL) = 0 Then Return - Goto DO_IT_AGAIN - Endif + + FIND_NEXT: - iCurrentPos = iPos + iCurrentPos = iPos + + Next - Next + Endif Endif