diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
index 1577bb3af2..3c1b84aa8a 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
@@ -64,6 +64,7 @@
+
Code
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
index 246de2fad2..23da8880c5 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
@@ -101,7 +101,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
foreach (SDBookmark bookmark in BookmarkManager.GetBookmarks(codeEditor.FileName)) {
bookmark.Document = codeEditor.DocumentAdapter;
- codeEditor.IconBarMargin.Bookmarks.Add(bookmark);
+ codeEditor.IconBarManager.Bookmarks.Add(bookmark);
}
BookmarkManager.Added += BookmarkManager_Added;
BookmarkManager.Removed += BookmarkManager_Removed;
@@ -111,17 +111,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
BookmarkManager.Added -= BookmarkManager_Added;
BookmarkManager.Removed -= BookmarkManager_Removed;
- foreach (SDBookmark bookmark in codeEditor.IconBarMargin.Bookmarks.OfType()) {
+ foreach (SDBookmark bookmark in codeEditor.IconBarManager.Bookmarks.OfType()) {
if (bookmark.Document == codeEditor.DocumentAdapter) {
bookmark.Document = null;
}
}
- codeEditor.IconBarMargin.Bookmarks.Clear();
+ codeEditor.IconBarManager.Bookmarks.Clear();
}
void BookmarkManager_Removed(object sender, BookmarkEventArgs e)
{
- codeEditor.IconBarMargin.Bookmarks.Remove(e.Bookmark);
+ codeEditor.IconBarManager.Bookmarks.Remove(e.Bookmark);
if (e.Bookmark.Document == codeEditor.DocumentAdapter) {
e.Bookmark.Document = null;
}
@@ -130,14 +130,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
void BookmarkManager_Added(object sender, BookmarkEventArgs e)
{
if (FileUtility.IsEqualFileName(this.PrimaryFileName, e.Bookmark.FileName)) {
- codeEditor.IconBarMargin.Bookmarks.Add(e.Bookmark);
+ codeEditor.IconBarManager.Bookmarks.Add(e.Bookmark);
e.Bookmark.Document = codeEditor.DocumentAdapter;
}
}
void BookmarksNotifyNameChange(string newFileName)
{
- foreach (SDBookmark bookmark in codeEditor.IconBarMargin.Bookmarks.OfType()) {
+ foreach (SDBookmark bookmark in codeEditor.IconBarManager.Bookmarks.OfType()) {
bookmark.FileName = newFileName;
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
index 3dbe4bf82f..7def95efe1 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
@@ -39,7 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
readonly CodeEditorAdapter primaryTextEditorAdapter;
TextEditor secondaryTextEditor;
CodeEditorAdapter secondaryTextEditorAdapter;
- readonly IconBarMargin iconBarMargin;
+ readonly IconBarManager iconBarManager;
readonly TextMarkerService textMarkerService;
public TextEditor PrimaryTextEditor {
@@ -86,8 +86,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
return primaryTextEditorAdapter;
}
- public IconBarMargin IconBarMargin {
- get { return iconBarMargin; }
+ public IconBarManager IconBarManager {
+ get { return iconBarManager; }
}
string fileName;
@@ -116,6 +116,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView));
textMarkerService = new TextMarkerService(this);
+ iconBarManager = new IconBarManager();
+
primaryTextEditor = CreateTextEditor();
primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor));
Debug.Assert(primaryTextEditorAdapter != null);
@@ -123,11 +125,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.Document = primaryTextEditor.Document;
primaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding("Document") { Source = this });
- // TODO: support iconbarmargin in split view
- this.iconBarMargin = new IconBarMargin { TextView = primaryTextEditor.TextArea.TextView };
- primaryTextEditor.TextArea.LeftMargins.Insert(0, iconBarMargin);
- primaryTextEditor.TextArea.TextView.Services.AddService(typeof(IBookmarkMargin), iconBarMargin);
-
this.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
SetRow(primaryTextEditor, 1);
@@ -159,6 +156,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
textView.LineTransformers.Add(textMarkerService);
textView.Services.AddService(typeof(ITextMarkerService), textMarkerService);
+ textView.Services.AddService(typeof(IBookmarkMargin), iconBarManager);
+ var iconBarMargin = new IconBarMargin(iconBarManager) { TextView = textView };
+ textEditor.TextArea.LeftMargins.Insert(0, iconBarMargin);
+
return textEditor;
}
@@ -240,7 +241,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
TextEditor textEditor = (TextEditor)sender;
ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(GetAdapter(textEditor));
- var pos = textEditor.GetPositionFromPoint(e.GetPosition(this));
+ var pos = textEditor.GetPositionFromPoint(e.GetPosition(textEditor));
args.InDocument = pos.HasValue;
if (pos.HasValue) {
args.LogicalPosition = AvalonEditDocumentAdapter.ToLocation(pos.Value);
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
new file mode 100644
index 0000000000..c030d4d02a
--- /dev/null
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
@@ -0,0 +1,47 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+
+using ICSharpCode.SharpDevelop.Bookmarks;
+
+namespace ICSharpCode.AvalonEdit.AddIn
+{
+ ///
+ /// Stores the entries in the icon bar margin. Multiple icon bar margins
+ /// can use the same manager if split view is used.
+ ///
+ public class IconBarManager : IBookmarkMargin
+ {
+ ObservableCollection bookmarks = new ObservableCollection();
+
+ public IconBarManager()
+ {
+ bookmarks.CollectionChanged += bookmarks_CollectionChanged;
+ }
+
+ public IList Bookmarks {
+ get { return bookmarks; }
+ }
+
+ void bookmarks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ Redraw();
+ }
+
+ public void Redraw()
+ {
+ if (RedrawRequested != null)
+ RedrawRequested(this, EventArgs.Empty);
+ }
+
+ public event EventHandler RedrawRequested;
+ }
+}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
index c76067ceec..113088655a 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
@@ -22,31 +22,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
///
/// Icon bar: contains breakpoints and other icons.
///
- public class IconBarMargin : AbstractMargin, IBookmarkMargin
+ public class IconBarMargin : AbstractMargin
{
- #region IBookmarkMargin implementation
- ObservableCollection bookmarks = new ObservableCollection();
+ readonly IconBarManager manager;
- public IconBarMargin()
+ public IconBarMargin(IconBarManager manager)
{
- bookmarks.CollectionChanged += bookmarks_CollectionChanged;
+ if (manager == null)
+ throw new ArgumentNullException("manager");
+ this.manager = manager;
}
- public IList Bookmarks {
- get { return bookmarks; }
- }
-
- void bookmarks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- InvalidateVisual();
- }
-
- public void Redraw()
- {
- InvalidateVisual();
- }
- #endregion
-
#region OnTextViewChanged
///
protected override void OnTextViewChanged(TextView oldTextView, TextView newTextView)
@@ -93,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (textView != null && textView.VisualLinesValid) {
// create a dictionary line number => first bookmark
Dictionary bookmarkDict = new Dictionary();
- foreach (IBookmark bm in bookmarks) {
+ foreach (IBookmark bm in manager.Bookmarks) {
int line = bm.LineNumber;
if (!bookmarkDict.ContainsKey(line))
bookmarkDict.Add(line, bm);
@@ -117,7 +103,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
VisualLine visualLine = textView.GetVisualLineFromVisualTop(e.GetPosition(textView).Y + textView.VerticalOffset);
if (visualLine != null) {
int line = visualLine.FirstDocumentLine.LineNumber;
- foreach (IBookmark bm in bookmarks) {
+ foreach (IBookmark bm in manager.Bookmarks) {
if (bm.LineNumber == line) {
bm.MouseDown(e);
if (e.Handled)