diff options
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Search/SearchCommands.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Search/SearchCommands.cs | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Search/SearchCommands.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Search/SearchCommands.cs new file mode 100644 index 000000000..4bb102e21 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Search/SearchCommands.cs @@ -0,0 +1,105 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Threading; +using Tango.Scripting.Editors.Document; +using Tango.Scripting.Editors.Editing; +using Tango.Scripting.Editors.Rendering; + +namespace Tango.Scripting.Editors.Search +{ + /// <summary> + /// Search commands for AvalonEdit. + /// </summary> + public static class SearchCommands + { + /// <summary> + /// Finds the next occurrence in the file. + /// </summary> + public static readonly RoutedCommand FindNext = new RoutedCommand( + "FindNext", typeof(SearchPanel), + new InputGestureCollection { new KeyGesture(Key.F3) } + ); + + /// <summary> + /// Finds the previous occurrence in the file. + /// </summary> + public static readonly RoutedCommand FindPrevious = new RoutedCommand( + "FindPrevious", typeof(SearchPanel), + new InputGestureCollection { new KeyGesture(Key.F3, ModifierKeys.Shift) } + ); + + /// <summary> + /// Closes the SearchPanel. + /// </summary> + public static readonly RoutedCommand CloseSearchPanel = new RoutedCommand( + "CloseSearchPanel", typeof(SearchPanel), + new InputGestureCollection { new KeyGesture(Key.Escape) } + ); + } + + /// <summary> + /// TextAreaInputHandler that registers all search-related commands. + /// </summary> + public class SearchInputHandler : TextAreaInputHandler + { + /// <summary> + /// Creates a new SearchInputHandler and registers the search-related commands. + /// </summary> + public SearchInputHandler(TextArea textArea) + : base(textArea) + { + RegisterCommands(this.CommandBindings); + panel = new SearchPanel(); + panel.Attach(TextArea); + } + + void RegisterCommands(ICollection<CommandBinding> commandBindings) + { + commandBindings.Add(new CommandBinding(ApplicationCommands.Find, ExecuteFind)); + commandBindings.Add(new CommandBinding(SearchCommands.FindNext, ExecuteFindNext)); + commandBindings.Add(new CommandBinding(SearchCommands.FindPrevious, ExecuteFindPrevious)); + commandBindings.Add(new CommandBinding(SearchCommands.CloseSearchPanel, ExecuteCloseSearchPanel)); + } + + SearchPanel panel; + + void ExecuteFind(object sender, ExecutedRoutedEventArgs e) + { + panel.Open(); + if (!(TextArea.Selection.IsEmpty || TextArea.Selection.IsMultiline)) + panel.SearchPattern = TextArea.Selection.GetText(); + Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, (Action)delegate { panel.Reactivate(); }); + } + + void ExecuteFindNext(object sender, ExecutedRoutedEventArgs e) + { + panel.FindNext(); + } + + void ExecuteFindPrevious(object sender, ExecutedRoutedEventArgs e) + { + panel.FindPrevious(); + } + + void ExecuteCloseSearchPanel(object sender, ExecutedRoutedEventArgs e) + { + panel.Close(); + } + + /// <summary> + /// Fired when SearchOptions are modified inside the SearchPanel. + /// </summary> + public event EventHandler<SearchOptionsChangedEventArgs> SearchOptionsChanged { + add { panel.SearchOptionsChanged += value; } + remove { panel.SearchOptionsChanged -= value; } + } + } +} |
