Browse Source

Add easier usable API for SearchPanel built into AvalonEdit

pull/42/head
Siegfried Pammer 12 years ago
parent
commit
3e96d7a6ea
  1. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  2. 2
      src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs
  3. 18
      src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs
  4. 11
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs
  5. 43
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs
  6. 2
      src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -199,7 +199,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -199,7 +199,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged;
codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add(
new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion));
codeEditorView.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(codeEditorView.TextArea));
SearchPanel.Install(codeEditorView.TextArea);
textView.BackgroundRenderers.Add(textMarkerService);
textView.LineTransformers.Add(textMarkerService);

2
src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs

@ -71,7 +71,7 @@ namespace ICSharpCode.ILSpyAddIn.ViewContent @@ -71,7 +71,7 @@ namespace ICSharpCode.ILSpyAddIn.ViewContent
this.adapter.TextEditor.MouseHoverStopped += TextEditorMouseHoverStopped;
this.adapter.TextEditor.MouseLeave += TextEditorMouseLeave;
this.adapter.TextEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(this.adapter.TextEditor.TextArea));
SearchPanel.Install(this.adapter.TextEditor.TextArea);
}
#region Popup

18
src/AddIns/Misc/SearchAndReplace/Project/SearchOptions.cs

@ -159,17 +159,15 @@ namespace SearchAndReplace @@ -159,17 +159,15 @@ namespace SearchAndReplace
public class SearchAndReplaceBinding : DefaultLanguageBinding
{
TextArea textArea;
SearchInputHandler handler;
SearchPanel panel;
public override void Attach(ITextEditor editor)
{
base.Attach(editor);
textArea = editor.GetService(typeof(TextArea)) as TextArea;
TextArea textArea = editor.GetService(typeof(TextArea)) as TextArea;
if (textArea != null) {
handler = new SearchInputHandler(textArea);
textArea.DefaultInputHandler.NestedInputHandlers.Add(handler);
handler.SearchOptionsChanged += SearchOptionsChanged;
panel = SearchPanel.Install(textArea);
panel.SearchOptionsChanged += SearchOptionsChanged;
}
}
@ -184,10 +182,10 @@ namespace SearchAndReplace @@ -184,10 +182,10 @@ namespace SearchAndReplace
public override void Detach()
{
base.Detach();
if (textArea != null) {
textArea.DefaultInputHandler.NestedInputHandlers.Remove(handler);
textArea = null;
handler = null;
if (panel != null) {
panel.SearchOptionsChanged -= SearchOptionsChanged;
panel.Uninstall();
panel = null;
}
}
}

11
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchCommands.cs

@ -53,12 +53,19 @@ namespace ICSharpCode.AvalonEdit.Search @@ -53,12 +53,19 @@ namespace ICSharpCode.AvalonEdit.Search
/// <summary>
/// Creates a new SearchInputHandler and registers the search-related commands.
/// </summary>
[Obsolete("Use SearchPanel.Install instead")]
public SearchInputHandler(TextArea textArea)
: base(textArea)
{
RegisterCommands(this.CommandBindings);
panel = new SearchPanel();
panel.Attach(TextArea);
panel = SearchPanel.Install(textArea);
}
internal SearchInputHandler(TextArea textArea, SearchPanel panel)
: base(textArea)
{
RegisterCommands(this.CommandBindings);
this.panel = panel;
}
void RegisterCommands(ICollection<CommandBinding> commandBindings)

43
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs

@ -27,6 +27,7 @@ namespace ICSharpCode.AvalonEdit.Search @@ -27,6 +27,7 @@ namespace ICSharpCode.AvalonEdit.Search
public class SearchPanel : Control
{
TextArea textArea;
SearchInputHandler handler;
TextDocument currentDocument;
SearchResultBackgroundRenderer renderer;
TextBox searchTextBox;
@ -163,6 +164,7 @@ namespace ICSharpCode.AvalonEdit.Search @@ -163,6 +164,7 @@ namespace ICSharpCode.AvalonEdit.Search
/// <summary>
/// Creates a new SearchPanel.
/// </summary>
[Obsolete("Use the Install method instead")]
public SearchPanel()
{
}
@ -170,10 +172,50 @@ namespace ICSharpCode.AvalonEdit.Search @@ -170,10 +172,50 @@ namespace ICSharpCode.AvalonEdit.Search
/// <summary>
/// Attaches this SearchPanel to a TextArea instance.
/// </summary>
[Obsolete("Use the Install method instead")]
public void Attach(TextArea textArea)
{
if (textArea == null)
throw new ArgumentNullException("textArea");
AttachInternal(textArea);
}
/// <summary>
/// Creates a SearchPanel and installs it to the TextEditor's TextArea.
/// </summary>
/// <remarks>This is a convenience wrapper.</remarks>
public static SearchPanel Install(TextEditor editor)
{
if (editor == null)
throw new ArgumentNullException("editor");
return Install(editor.TextArea);
}
/// <summary>
/// Creates a SearchPanel and installs it to the TextArea.
/// </summary>
public static SearchPanel Install(TextArea textArea)
{
if (textArea == null)
throw new ArgumentNullException("textArea");
SearchPanel panel = new SearchPanel();
panel.AttachInternal(textArea);
panel.handler = new SearchInputHandler(textArea, panel);
textArea.DefaultInputHandler.NestedInputHandlers.Add(panel.handler);
return panel;
}
/// <summary>
/// Removes the SearchPanel from the TextArea.
/// </summary>
public void Uninstall()
{
CloseAndRemove();
textArea.DefaultInputHandler.NestedInputHandlers.Remove(handler);
}
void AttachInternal(TextArea textArea)
{
this.textArea = textArea;
adorner = new SearchPanelAdorner(textArea, this);
DataContext = this;
@ -361,6 +403,7 @@ namespace ICSharpCode.AvalonEdit.Search @@ -361,6 +403,7 @@ namespace ICSharpCode.AvalonEdit.Search
/// <summary>
/// Closes the SearchPanel and removes it.
/// </summary>
[Obsolete("Use the Uninstall method instead!")]
public void CloseAndRemove()
{
Close();

2
src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs

@ -225,7 +225,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -225,7 +225,7 @@ namespace ICSharpCode.SharpDevelop.Gui
DisplayActiveCategory();
ProjectService.SolutionLoaded += SolutionLoaded;
textEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(textEditor.TextArea));
SearchPanel.Install(textEditor);
}
void SolutionLoaded(object sender, SolutionEventArgs e)

Loading…
Cancel
Save