/// <summary>Execute the command.</summary>
        public override void Execute()
        {
            IFindReplaceProvider editorFindProvider = HostWindow.ActiveChildForm as IFindReplaceProvider;

            if (editorFindProvider != null)
            {
                FindTextRequest req = null;
                int             key = editorFindProvider.GetHashCode();

                // is there a request in the table for this window?
                if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
                {
                    req = SearchToolsCommon.FindReplaceTextRequests[key];
                }

                if (req != null)
                {
                    // wrap around to start if at last pos
                    if (req.Position != 0)
                    {
                        req.Position = editorFindProvider.CursorOffset;
                    }

                    if (editorFindProvider.ReplaceString(req.ReplaceValue, req.Position - req.SearchValue.Length, req.SearchValue.Length))
                    {
                        CommandManager.GetCommandInstance <FindNextStringCommand>().Execute();
                    }
                }
            }
        }
        /// <summary>Two execution methods - through the "Find Text" window or by hitting F3.
        /// If simply hitting F3, we are executing the current search from current cursor position for this window.
        /// Different windows can also have different search text.</summary>
        public override void Execute()
        {
            IFindReplaceProvider editorFindProvider = HostWindow.ActiveChildForm as IFindReplaceProvider;

            if (editorFindProvider != null)
            {
                FindTextRequest findTextRequest = null;
                int             key             = editorFindProvider.GetHashCode();

                // is there a request in the table for this window?
                if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
                {
                    findTextRequest = SearchToolsCommon.FindReplaceTextRequests[key];
                }
                else
                {
                    if (SearchToolsCommon.FindReplaceTextRequests.Count > 0)
                    {
                        // if there is an entry in the list of searches create an instance
                        findTextRequest          = new FindTextRequest(editorFindProvider);
                        findTextRequest.Position = editorFindProvider.CursorOffset;
                    }
                    else
                    {
                        // none in table, default to curently selected text if its the editor
                        IEditor editor = ActiveFormAsEditor;
                        if (editor != null && editor.SelectedText.Length > 0)
                        {
                            findTextRequest          = new FindTextRequest(editorFindProvider, editor.SelectedText);
                            findTextRequest.Position = editorFindProvider.CursorOffset;
                        }
                    }
                }

                if (findTextRequest != null)
                {
                    // wrap around to start if at last pos
                    if (findTextRequest.Position != 0)
                    {
                        findTextRequest.Position = editorFindProvider.CursorOffset;
                    }

                    findTextRequest = editorFindProvider.TextFindService.FindNext(findTextRequest);
                    SearchToolsCommon.FindReplaceTextRequests[key] = findTextRequest;
                }
            }
        }
Exemple #3
0
        /// <summary>The create find request.</summary>
        /// <param name="provider">The provider.</param>
        /// <param name="findString">The find string.</param>
        /// <param name="replaceValue">The replace value.</param>
        private void CreateFindRequest(IFindReplaceProvider provider, string findString, string replaceValue)
        {
            int             key = provider.GetHashCode();
            FindTextRequest request;

            if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
            {
                request = SearchToolsCommon.FindReplaceTextRequests[key];
                if (request.SearchValue != findString)
                {
                    // reset find text and set the starting position to the current cursor location
                    request.SearchValue  = findString;
                    request.ReplaceValue = replaceValue;
                    request.Position     = provider.CursorOffset;
                }
            }
            else
            {
                request = new FindTextRequest(provider, findString);
                request.ReplaceValue = replaceValue;
            }

            SearchToolsCommon.FindReplaceTextRequests[key] = request;
        }