Browse Source

Move bracket highlighting from CodeEditor to CodeEditorView.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5205 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
ef0da64c45
  1. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
  2. 26
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  3. 21
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs

@ -117,6 +117,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
void CaretChanged(object sender, EventArgs e) void CaretChanged(object sender, EventArgs e)
{ {
NavigationService.Log(this.BuildNavPoint()); NavigationService.Log(this.BuildNavPoint());
StatusBarService.SetCaretPosition(this.Column, this.Line, this.Column);
} }
#region Bookmark Handling #region Bookmark Handling

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

@ -55,9 +55,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
readonly TextMarkerService textMarkerService; readonly TextMarkerService textMarkerService;
ErrorPainter errorPainter; ErrorPainter errorPainter;
BracketHighlightRenderer primaryBracketRenderer;
BracketHighlightRenderer secondaryBracketRenderer;
public CodeEditorView PrimaryTextEditor { public CodeEditorView PrimaryTextEditor {
get { return primaryTextEditor; } get { return primaryTextEditor; }
} }
@ -152,8 +149,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
Debug.Assert(primaryTextEditorAdapter != null); Debug.Assert(primaryTextEditorAdapter != null);
activeTextEditor = primaryTextEditor; activeTextEditor = primaryTextEditor;
this.primaryBracketRenderer = new BracketHighlightRenderer(primaryTextEditor.TextArea.TextView);
this.Document = primaryTextEditor.Document; this.Document = primaryTextEditor.Document;
primaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding("Document") { Source = this }); primaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding("Document") { Source = this });
@ -270,8 +265,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
SetRow(secondaryTextEditor, 2); SetRow(secondaryTextEditor, 2);
this.Children.Add(secondaryTextEditor); this.Children.Add(secondaryTextEditor);
this.secondaryBracketRenderer = new BracketHighlightRenderer(secondaryTextEditor.TextArea.TextView);
secondaryTextEditorAdapter.FileNameChanged(); secondaryTextEditorAdapter.FileNameChanged();
FetchParseInformation(); FetchParseInformation();
} else { } else {
@ -283,7 +276,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
secondaryTextEditorAdapter.Language.Detach(); secondaryTextEditorAdapter.Language.Detach();
secondaryTextEditorAdapter = null; secondaryTextEditorAdapter = null;
gridSplitter = null; gridSplitter = null;
this.secondaryBracketRenderer = null;
this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1);
this.ActiveTextEditor = primaryTextEditor; this.ActiveTextEditor = primaryTextEditor;
} }
@ -306,24 +298,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
quickClassBrowser.SelectItemAtCaretPosition(this.ActiveTextEditorAdapter.Caret.Position); quickClassBrowser.SelectItemAtCaretPosition(this.ActiveTextEditorAdapter.Caret.Position);
} }
var caret = this.ActiveTextEditor.TextArea.Caret;
var activeAdapter = this.ActiveTextEditorAdapter;
/*
* Special case: ITextEditor.Language guarantees that it never returns null.
* In this case however it can be null, since this code is called while the document is loaded.
* ITextEditor.Language gets set in CodeEditorAdapter.FileNameChanged, which is called after
* loading of the document has finished.
* */
if (activeAdapter.Language != null) {
var bracketSearchResult = activeAdapter.Language.BracketSearcher.SearchBracket(activeAdapter.Document, activeAdapter.Caret.Offset);
if (activeAdapter == primaryTextEditorAdapter)
this.primaryBracketRenderer.SetHighlight(bracketSearchResult);
else
this.secondaryBracketRenderer.SetHighlight(bracketSearchResult);
}
StatusBarService.SetCaretPosition(caret.Column, caret.Line, caret.Column);
CaretPositionChanged.RaiseEvent(this, EventArgs.Empty); CaretPositionChanged.RaiseEvent(this, EventArgs.Empty);
} }

21
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs

@ -36,6 +36,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
public ITextEditor Adapter { get; set; } public ITextEditor Adapter { get; set; }
CodeEditorOptions options; CodeEditorOptions options;
BracketHighlightRenderer bracketRenderer;
public CodeEditorView() public CodeEditorView()
{ {
@ -43,15 +44,35 @@ namespace ICSharpCode.AvalonEdit.AddIn
options = ICSharpCode.AvalonEdit.AddIn.Options.CodeEditorOptions.Instance; options = ICSharpCode.AvalonEdit.AddIn.Options.CodeEditorOptions.Instance;
options.BindToTextEditor(this); options.BindToTextEditor(this);
bracketRenderer = new BracketHighlightRenderer(this.TextArea.TextView);
this.MouseHover += TextEditorMouseHover; this.MouseHover += TextEditorMouseHover;
this.MouseHoverStopped += TextEditorMouseHoverStopped; this.MouseHoverStopped += TextEditorMouseHoverStopped;
this.MouseLeave += TextEditorMouseLeave; this.MouseLeave += TextEditorMouseLeave;
this.TextArea.TextView.MouseDown += TextViewMouseDown; this.TextArea.TextView.MouseDown += TextViewMouseDown;
this.TextArea.Caret.PositionChanged += TextArea_PositionChanged;
var editingKeyBindings = this.TextArea.DefaultInputHandler.Editing.InputBindings.OfType<KeyBinding>(); var editingKeyBindings = this.TextArea.DefaultInputHandler.Editing.InputBindings.OfType<KeyBinding>();
var tabBinding = editingKeyBindings.Single(b => b.Key == Key.Tab && b.Modifiers == ModifierKeys.None); var tabBinding = editingKeyBindings.Single(b => b.Key == Key.Tab && b.Modifiers == ModifierKeys.None);
tabBinding.Command = new CustomTabCommand(this, tabBinding.Command); tabBinding.Command = new CustomTabCommand(this, tabBinding.Command);
} }
void TextArea_PositionChanged(object sender, EventArgs e)
{
/*
* Special case: ITextEditor.Language guarantees that it never returns null.
* In this case however it can be null, since this code may be called while the document is loaded.
* ITextEditor.Language gets set in CodeEditorAdapter.FileNameChanged, which is called after
* loading of the document has finished.
* */
if (activeAdapter.Language != null) {
var bracketSearchResult = activeAdapter.Language.BracketSearcher.SearchBracket(activeAdapter.Document, activeAdapter.Caret.Offset);
if (activeAdapter == primaryTextEditorAdapter)
this.primaryBracketRenderer.SetHighlight(bracketSearchResult);
else
this.secondaryBracketRenderer.SetHighlight(bracketSearchResult);
}
}
sealed class CustomTabCommand : ICommand sealed class CustomTabCommand : ICommand
{ {

Loading…
Cancel
Save