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)