public void FindAll(string term, FindReplaceAllMode mode, SearchOptions searchOptions) { if (mode == FindReplaceAllMode.CurrentFile && Model.Document == null) { return; } var documentPaths = new Queue <string>(mode == FindReplaceAllMode.CurrentFile ? new[] { Model.Document.FullPath } : GetAllDocumentPaths(mode == FindReplaceAllMode.AllFiles)); var result = new List <AData.Location>(); void Find(IEnumerable <AData.Location> locations) { result.AddRange(locations); if (documentPaths.Count == 0) { DisplayFindResult(term, result); } else { var fullPath = documentPaths.Dequeue(); FindAll(fullPath, 0, -1, term, false, searchOptions, Find); } } Find(Enumerable.Empty <AData.Location>()); }
public void ReplaceAll(string term, string replace, FindReplaceAllMode mode, SearchOptions searchOptions) { if (MessageBox.Show("Do you want to continue with Replace All ?", "Replace All", MessageBoxButtons.YesNo) == DialogResult.No) { return; } if (mode == FindReplaceAllMode.CurrentFile && Model.Document == null) { return; } var documentPaths = new Queue <string>(mode == FindReplaceAllMode.CurrentFile ? new[] { Model.Document.FullPath } : GetAllDocumentPaths(mode == FindReplaceAllMode.AllFiles)); var result = new List <AData.Location>(); void Replace(IEnumerable <AData.Location> locations) { result.AddRange(locations); if (documentPaths.Count == 0) { // must re-order result set before replacing var orderedResult = result.OrderBy(x => x.FileId).ThenByDescending(x => x.Position); // replace all items from bottom to top foreach (var location in orderedResult) { var filePath = FilePath(location.FileId); if (Model.Documents.TryGetValue(filePath, out Document document)) { document.Editor.SetSelection(location.Position, location.EndPosition); document.Editor.ReplaceSelection(replace); } } MessageBox.Show("Done", "Replace All"); } else { var fullPath = documentPaths.Dequeue(); FindAll(fullPath, 0, -1, term, false, searchOptions, Replace); } } Replace(Enumerable.Empty <AData.Location>()); }