/// <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; } } }
/// <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; }