Browse Source

Added 'Find Next Selected' search menu option which will find the next occurrence of the selected text in the document.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1530 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 19 years ago
parent
commit
1c2d6baba1
  1. 4
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 52
      src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Commands/SearchMainMenuCommands.cs

4
AddIns/ICSharpCode.SharpDevelop.addin

@ -1724,6 +1724,10 @@ @@ -1724,6 +1724,10 @@
icon = "Icons.16x16.FindNextIcon"
shortcut = "F3"
class = "SearchAndReplace.FindNext"/>
<MenuItem id = "FindNextSelected"
label = "${res:XML.MainMenu.SearchMenu.FindNextSelected}"
shortcut = "Control|F3"
class = "SearchAndReplace.FindNextSelected"/>
<MenuItem id = "Replace"
label = "${res:XML.MainMenu.SearchMenu.Replace}"
icon = "Icons.16x16.ReplaceIcon"

52
src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Commands/SearchMainMenuCommands.cs

@ -47,7 +47,7 @@ namespace SearchAndReplace @@ -47,7 +47,7 @@ namespace SearchAndReplace
SearchAndReplaceDialog.ShowSingleInstance(SearchAndReplaceMode.Search);
}
static bool IsMultipleLines(string text)
public static bool IsMultipleLines(string text)
{
return text.IndexOf('\n') != -1;
}
@ -66,6 +66,56 @@ namespace SearchAndReplace @@ -66,6 +66,56 @@ namespace SearchAndReplace
}
}
/// <summary>
/// Finds the next text match based on the text currently
/// selected. It uses the currently active search options and only changes
/// the current find pattern. If the currently active search is inside the
/// current text selection then the quick find will change the search so it is
/// across the active document, otherwise it will not change the current setting.
/// </summary>
/// <remarks>
/// If there is a piece of text selected on a single line then the quick
/// find will search for that. If multiple lines of text are selected then
/// the word at the start of the selection is determined and searche for.
/// If no text is selected then the word next to the caret is used. If
/// no text is selected, but the caret is immediately surrounded by whitespace
/// then quick find does nothing.
/// </remarks>
public class FindNextSelected : AbstractMenuCommand
{
public override void Run()
{
TextEditorControl textArea = SearchReplaceUtilities.GetActiveTextEditor();
if (textArea == null) {
return;
}
// Determine what text we should search for.
string textToFind;
string selectedText = textArea.ActiveTextAreaControl.TextArea.SelectionManager.SelectedText;
if (selectedText.Length > 0) {
if (Find.IsMultipleLines(selectedText)) {
// Locate the nearest word at the selection start.
textToFind = TextUtilities.GetWordAt(textArea.Document, textArea.ActiveTextAreaControl.TextArea.SelectionManager.SelectionCollection[0].Offset);
} else {
// Search for selected text.
textToFind = selectedText;
}
} else {
textToFind = TextUtilities.GetWordAt(textArea.Document, textArea.ActiveTextAreaControl.Caret.Offset);
}
if (textToFind != null && textToFind.Length > 0) {
SearchOptions.CurrentFindPattern = textToFind;
if (SearchOptions.DocumentIteratorType == DocumentIteratorType.CurrentSelection) {
SearchOptions.DocumentIteratorType = DocumentIteratorType.CurrentDocument;
}
SearchReplaceManager.FindNext();
}
}
}
public class Replace : AbstractMenuCommand
{
public override void Run()

Loading…
Cancel
Save