예제 #1
0
        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>());
        }
예제 #2
0
        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>());
        }