private void search_Click(object sender, EventArgs e)
        {
            App.GetService<IStatusBarService>().ClearStatusString();
            var sm = new SearchManager(Sci.GetText());
            var flags = caseSensitive.Checked ? SearchFlags.MatchCase : SearchFlags.None;
            lastResult = lastText != textBox.Text ? null : lastResult;

            lastResult = sm.Search(flags, textBox.Text,
                lastResult != null ? lastResult.EndPosition : 0, Sci.GetTextLength());

            if (lastResult.Found)
            {
                lastText = textBox.Text;
                Sci.Select(lastResult.StartPosition, lastResult.EndPosition - lastResult.StartPosition, SelectionFlags.MakeOnlySelection | SelectionFlags.ScrollToCaret);
            }
            else
            {
                lastResult = null;
                App.GetService<IStatusBarService>().SetStatusString(StatusType.Warning, "There are no more occurences of '{0}' in the document.", textBox.Text);
            }
        }
Exemple #2
0
        private bool Search(string textToFind, Document doc, SearchFlags flags, SearchScope scope, Func<Document,SearchResult,Boolean> foundAction, bool silent, 
            int startPosition, int endPosition, SearchManager sm)
        {
            lastSettings = null;
            var editor = (ITextEditor)App.Editor(doc.GetType());
            sm = sm ?? new SearchManager(editor.GetContent(doc));

            var sp = startPosition;
            var ep = endPosition;

            var res = sm.Search(flags, textToFind, sp, ep);

            if (res.Found)
            {
                lastSettings = new SearchSettings
                {
                    Text = textToFind,
                    Flags = flags,
                    Scope = scope,
                    LastEndPosition = res.EndPosition,
                    LastDocument = doc,
                    MaxPosition = ep,
                    SearchManager = silent ? sm : null
                };

                if (!silent)
                    sm.Dispose();

                return foundAction(doc, res);
            }
            else if (scope == SearchScope.AllDocuments)
            {
                sm.Dispose();
                sm = null;

                var srv = App.GetService<IDocumentService>();
                var newDoc = GetNextDocument(doc);

                if (newDoc != null)
                {
                    if (scanned == null)
                        scanned = new List<Document>();

                    if (scanned.IndexOf(newDoc) != -1)
                        return false;
                    else
                        scanned.Add(newDoc);

                    if (!silent)
                        srv.SetActiveDocument(newDoc);

                    if (silent)
                        sm = new SearchManager(editor.GetContent(newDoc));

                    return Search(textToFind, newDoc, flags, scope, foundAction, silent, 0, 0, sm);
                }

                return false;
            }
            else
            {
                sm.Dispose();
                return false;
            }
        }