Browse Source

Implemented ClassMemberBookmarks and NavigationPoints for AvalonEdit.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4212 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
39c00dbb0c
  1. 13
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
  2. 50
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  3. 47
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
  4. 1
      src/Main/Base/Project/Src/Editor/Search/SearchResultsPad.cs
  5. 2
      src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs

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

@ -31,6 +31,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -31,6 +31,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.Files.Add(file);
file.ForceInitializeView(this);
codeEditor.Document.Changed += textEditor_Document_Changed;
codeEditor.CaretPositionChanged += CaretChanged;
}
void textEditor_Document_Changed(object sender, DocumentChangeEventArgs e)
@ -97,6 +98,18 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -97,6 +98,18 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
public override INavigationPoint BuildNavPoint()
{
int lineNumber = this.Line;
string txt = codeEditor.Document.GetLineByNumber(lineNumber).Text;
return new TextNavigationPoint(this.PrimaryFileName, lineNumber, this.Column, txt);
}
void CaretChanged(object sender, EventArgs e)
{
NavigationService.Log(this.BuildNavPoint());
}
#region Bookmark Handling
void BookmarksAttach()
{

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

@ -62,8 +62,14 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -62,8 +62,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
set {
if (document != value) {
if (document != null)
document.UpdateFinished -= DocumentUpdateFinished;
document = value;
if (document != null)
document.UpdateFinished += DocumentUpdateFinished;
if (DocumentChanged != null) {
DocumentChanged(this, EventArgs.Empty);
}
@ -222,31 +228,36 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -222,31 +228,36 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
public event EventHandler CaretPositionChanged;
bool caretPositionWasChanged;
void caret_PositionChanged(object sender, EventArgs e)
{
InvalidateQuickClassBrowserCaretPosition();
Debug.Assert(sender is Caret);
if (sender == this.ActiveTextEditor.TextArea.Caret) {
if (document.IsInUpdate)
caretPositionWasChanged = true;
else
HandleCaretPositionChange();
}
}
bool quickClassBrowserCaretPositionInvalid;
void DocumentUpdateFinished(object sender, EventArgs e)
{
if (caretPositionWasChanged) {
caretPositionWasChanged = false;
HandleCaretPositionChange();
}
}
/// <summary>
/// Only call 'SelectItemAtCaretPosition' once when the caret position
/// changes multiple times (e.g. running refactoring which causes lots of caret changes).
/// </summary>
void InvalidateQuickClassBrowserCaretPosition()
void HandleCaretPositionChange()
{
if (!quickClassBrowserCaretPositionInvalid) {
quickClassBrowserCaretPositionInvalid = true;
Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(
delegate {
quickClassBrowserCaretPositionInvalid = false;
if (quickClassBrowser != null) {
quickClassBrowser.SelectItemAtCaretPosition(this.ActiveTextEditorAdapter.Caret.Position);
}
}));
if (quickClassBrowser != null) {
quickClassBrowser.SelectItemAtCaretPosition(this.ActiveTextEditorAdapter.Caret.Position);
}
var caret = this.ActiveTextEditor.TextArea.Caret;
StatusBarService.SetCaretPosition(caret.Column, caret.Line, caret.Column);
CaretPositionChanged.RaiseEvent(this, EventArgs.Empty);
}
public void JumpTo(int line, int column)
@ -458,13 +469,14 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -458,13 +469,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.Children.Add(quickClassBrowser);
}
quickClassBrowser.Update(parseInfo.MostRecentCompilationUnit);
InvalidateQuickClassBrowserCaretPosition();
quickClassBrowser.SelectItemAtCaretPosition(this.ActiveTextEditorAdapter.Caret.Position);
} else {
if (quickClassBrowser != null) {
this.Children.Remove(quickClassBrowser);
quickClassBrowser = null;
}
}
iconBarManager.UpdateClassMemberBookmarks(parseInfo);
}
}
}

47
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs

@ -5,11 +5,11 @@ @@ -5,11 +5,11 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Dom;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using ICSharpCode.SharpDevelop.Bookmarks;
namespace ICSharpCode.AvalonEdit.AddIn
@ -43,5 +43,50 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -43,5 +43,50 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
public event EventHandler RedrawRequested;
internal void UpdateClassMemberBookmarks(ParseInformation parseInfo)
{
for (int i = bookmarks.Count - 1; i >= 0; i--) {
if (IsClassMemberBookmark(bookmarks[i]))
bookmarks.RemoveAt(i);
}
if (parseInfo == null)
return;
foreach (IClass c in parseInfo.MostRecentCompilationUnit.Classes) {
AddClassMemberBookmarks(c);
}
}
void AddClassMemberBookmarks(IClass c)
{
if (c.IsSynthetic) return;
if (!c.Region.IsEmpty) {
bookmarks.Add(new ClassBookmark(c));
}
foreach (IClass innerClass in c.InnerClasses) {
AddClassMemberBookmarks(innerClass);
}
foreach (IMethod m in c.Methods) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(m));
}
foreach (IProperty m in c.Properties) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(m));
}
foreach (IField f in c.Fields) {
if (f.Region.IsEmpty || f.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(f));
}
foreach (IEvent e in c.Events) {
if (e.Region.IsEmpty || e.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(e));
}
}
static bool IsClassMemberBookmark(IBookmark b)
{
return b is ClassMemberBookmark || b is ClassBookmark;
}
}
}

1
src/Main/Base/Project/Src/Editor/Search/SearchResultsPad.cs

@ -70,6 +70,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -70,6 +70,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public void ClearLastSearchesList()
{
lastSearches.Clear();
contentPlaceholder.SetContent(null);
}
public void ShowSearchResults(ISearchResult result)

2
src/Main/Base/Project/Src/TextEditor/Bookmarks/ClassMemberBookmark.cs

@ -73,7 +73,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks @@ -73,7 +73,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
public virtual IImage Image {
get {
return null;
return ClassBrowserIconService.GetIcon(@class);
}
}

Loading…
Cancel
Save