Browse Source

Improved performance of "Replace all".

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@528 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
c9b90e95f3
  1. 23
      src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/SearchReplaceManager.cs

23
src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Engine/SearchReplaceManager.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using ICSharpCode.SharpDevelop.Gui;
@ -89,34 +90,38 @@ namespace SearchAndReplace @@ -89,34 +90,38 @@ namespace SearchAndReplace
public static void ReplaceAll()
{
SetSearchOptions();
TextEditorControl textArea = null;
if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow != null) {
textArea = ((ITextEditorControlProvider)WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent).TextEditorControl;
TextEditorControl textArea = ((ITextEditorControlProvider)WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent).TextEditorControl;
textArea.ActiveTextAreaControl.TextArea.SelectionManager.ClearSelection();
}
find.Reset();
find.SearchStrategy.CompilePattern();
List<TextEditorControl> textAreas = new List<TextEditorControl>();
while (true) {
SearchResult result = SearchReplaceManager.find.FindNext();
if (result == null) {
foreach (TextEditorControl textArea in textAreas) {
textArea.EndUpdate();
textArea.Refresh();
}
MessageService.ShowMessage("${res:ICSharpCode.TextEditor.Document.SearchReplaceManager.ReplaceAllDone}", "${res:Global.FinishedCaptionText}");
find.Reset();
return;
} else {
textArea = OpenTextArea(result.FileName);
TextEditorControl textArea = OpenTextArea(result.FileName);
textArea.BeginUpdate();
textArea.ActiveTextAreaControl.TextArea.SelectionManager.SelectionCollection.Clear();
if (!textAreas.Contains(textArea)) {
textArea.BeginUpdate();
textArea.ActiveTextAreaControl.TextArea.SelectionManager.SelectionCollection.Clear();
textAreas.Add(textArea);
}
string transformedPattern = result.TransformReplacePattern(SearchOptions.ReplacePattern);
find.Replace(result.Offset,
result.Length,
transformedPattern);
textArea.EndUpdate();
textArea.Refresh();
}
}
}
@ -145,7 +150,7 @@ namespace SearchAndReplace @@ -145,7 +150,7 @@ namespace SearchAndReplace
TextEditorControl textArea = OpenTextArea(result.FileName);
if (lastResult != null && lastResult.FileName == result.FileName &&
textArea.ActiveTextAreaControl.Caret.Offset != lastResult.Offset + lastResult.Length) {
textArea.ActiveTextAreaControl.Caret.Offset != lastResult.Offset + lastResult.Length) {
find.Reset();
}
int startPos = Math.Min(textArea.Document.TextLength, Math.Max(0, result.Offset));

Loading…
Cancel
Save