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

Loading…
Cancel
Save