Browse Source

Support IconBarMargin in split view.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4033 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
66faa9efe5
  1. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  2. 12
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
  3. 19
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  4. 47
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
  5. 30
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -64,6 +64,7 @@
<Compile Include="Src\CodeEditor.cs" /> <Compile Include="Src\CodeEditor.cs" />
<Compile Include="Src\CodeEditorAdapter.cs" /> <Compile Include="Src\CodeEditorAdapter.cs" />
<Compile Include="Src\CustomCommands.cs" /> <Compile Include="Src\CustomCommands.cs" />
<Compile Include="Src\IconBarManager.cs" />
<Compile Include="Src\IconBarMargin.cs" /> <Compile Include="Src\IconBarMargin.cs" />
<Compile Include="Src\QuickClassBrowser.cs"> <Compile Include="Src\QuickClassBrowser.cs">
<SubType>Code</SubType> <SubType>Code</SubType>

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

@ -101,7 +101,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{ {
foreach (SDBookmark bookmark in BookmarkManager.GetBookmarks(codeEditor.FileName)) { foreach (SDBookmark bookmark in BookmarkManager.GetBookmarks(codeEditor.FileName)) {
bookmark.Document = codeEditor.DocumentAdapter; bookmark.Document = codeEditor.DocumentAdapter;
codeEditor.IconBarMargin.Bookmarks.Add(bookmark); codeEditor.IconBarManager.Bookmarks.Add(bookmark);
} }
BookmarkManager.Added += BookmarkManager_Added; BookmarkManager.Added += BookmarkManager_Added;
BookmarkManager.Removed += BookmarkManager_Removed; BookmarkManager.Removed += BookmarkManager_Removed;
@ -111,17 +111,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
{ {
BookmarkManager.Added -= BookmarkManager_Added; BookmarkManager.Added -= BookmarkManager_Added;
BookmarkManager.Removed -= BookmarkManager_Removed; BookmarkManager.Removed -= BookmarkManager_Removed;
foreach (SDBookmark bookmark in codeEditor.IconBarMargin.Bookmarks.OfType<SDBookmark>()) { foreach (SDBookmark bookmark in codeEditor.IconBarManager.Bookmarks.OfType<SDBookmark>()) {
if (bookmark.Document == codeEditor.DocumentAdapter) { if (bookmark.Document == codeEditor.DocumentAdapter) {
bookmark.Document = null; bookmark.Document = null;
} }
} }
codeEditor.IconBarMargin.Bookmarks.Clear(); codeEditor.IconBarManager.Bookmarks.Clear();
} }
void BookmarkManager_Removed(object sender, BookmarkEventArgs e) 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) { if (e.Bookmark.Document == codeEditor.DocumentAdapter) {
e.Bookmark.Document = null; e.Bookmark.Document = null;
} }
@ -130,14 +130,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
void BookmarkManager_Added(object sender, BookmarkEventArgs e) void BookmarkManager_Added(object sender, BookmarkEventArgs e)
{ {
if (FileUtility.IsEqualFileName(this.PrimaryFileName, e.Bookmark.FileName)) { 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; e.Bookmark.Document = codeEditor.DocumentAdapter;
} }
} }
void BookmarksNotifyNameChange(string newFileName) void BookmarksNotifyNameChange(string newFileName)
{ {
foreach (SDBookmark bookmark in codeEditor.IconBarMargin.Bookmarks.OfType<SDBookmark>()) { foreach (SDBookmark bookmark in codeEditor.IconBarManager.Bookmarks.OfType<SDBookmark>()) {
bookmark.FileName = newFileName; bookmark.FileName = newFileName;
} }
} }

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

@ -39,7 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
readonly CodeEditorAdapter primaryTextEditorAdapter; readonly CodeEditorAdapter primaryTextEditorAdapter;
TextEditor secondaryTextEditor; TextEditor secondaryTextEditor;
CodeEditorAdapter secondaryTextEditorAdapter; CodeEditorAdapter secondaryTextEditorAdapter;
readonly IconBarMargin iconBarMargin; readonly IconBarManager iconBarManager;
readonly TextMarkerService textMarkerService; readonly TextMarkerService textMarkerService;
public TextEditor PrimaryTextEditor { public TextEditor PrimaryTextEditor {
@ -86,8 +86,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
return primaryTextEditorAdapter; return primaryTextEditorAdapter;
} }
public IconBarMargin IconBarMargin { public IconBarManager IconBarManager {
get { return iconBarMargin; } get { return iconBarManager; }
} }
string fileName; string fileName;
@ -116,6 +116,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView)); this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView));
textMarkerService = new TextMarkerService(this); textMarkerService = new TextMarkerService(this);
iconBarManager = new IconBarManager();
primaryTextEditor = CreateTextEditor(); primaryTextEditor = CreateTextEditor();
primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor)); primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor));
Debug.Assert(primaryTextEditorAdapter != null); Debug.Assert(primaryTextEditorAdapter != null);
@ -123,11 +125,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
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 });
// 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 = GridLength.Auto });
this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
SetRow(primaryTextEditor, 1); SetRow(primaryTextEditor, 1);
@ -159,6 +156,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
textView.LineTransformers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService);
textView.Services.AddService(typeof(ITextMarkerService), 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; return textEditor;
} }
@ -240,7 +241,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{ {
TextEditor textEditor = (TextEditor)sender; TextEditor textEditor = (TextEditor)sender;
ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(GetAdapter(textEditor)); ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(GetAdapter(textEditor));
var pos = textEditor.GetPositionFromPoint(e.GetPosition(this)); var pos = textEditor.GetPositionFromPoint(e.GetPosition(textEditor));
args.InDocument = pos.HasValue; args.InDocument = pos.HasValue;
if (pos.HasValue) { if (pos.HasValue) {
args.LogicalPosition = AvalonEditDocumentAdapter.ToLocation(pos.Value); args.LogicalPosition = AvalonEditDocumentAdapter.ToLocation(pos.Value);

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

@ -0,0 +1,47 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using ICSharpCode.SharpDevelop.Bookmarks;
namespace ICSharpCode.AvalonEdit.AddIn
{
/// <summary>
/// Stores the entries in the icon bar margin. Multiple icon bar margins
/// can use the same manager if split view is used.
/// </summary>
public class IconBarManager : IBookmarkMargin
{
ObservableCollection<IBookmark> bookmarks = new ObservableCollection<IBookmark>();
public IconBarManager()
{
bookmarks.CollectionChanged += bookmarks_CollectionChanged;
}
public IList<IBookmark> 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;
}
}

30
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs

@ -22,31 +22,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
/// <summary> /// <summary>
/// Icon bar: contains breakpoints and other icons. /// Icon bar: contains breakpoints and other icons.
/// </summary> /// </summary>
public class IconBarMargin : AbstractMargin, IBookmarkMargin public class IconBarMargin : AbstractMargin
{ {
#region IBookmarkMargin implementation readonly IconBarManager manager;
ObservableCollection<IBookmark> bookmarks = new ObservableCollection<IBookmark>();
public IconBarMargin() public IconBarMargin(IconBarManager manager)
{ {
bookmarks.CollectionChanged += bookmarks_CollectionChanged; if (manager == null)
throw new ArgumentNullException("manager");
this.manager = manager;
} }
public IList<IBookmark> Bookmarks {
get { return bookmarks; }
}
void bookmarks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
InvalidateVisual();
}
public void Redraw()
{
InvalidateVisual();
}
#endregion
#region OnTextViewChanged #region OnTextViewChanged
/// <inheritdoc/> /// <inheritdoc/>
protected override void OnTextViewChanged(TextView oldTextView, TextView newTextView) protected override void OnTextViewChanged(TextView oldTextView, TextView newTextView)
@ -93,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (textView != null && textView.VisualLinesValid) { if (textView != null && textView.VisualLinesValid) {
// create a dictionary line number => first bookmark // create a dictionary line number => first bookmark
Dictionary<int, IBookmark> bookmarkDict = new Dictionary<int, IBookmark>(); Dictionary<int, IBookmark> bookmarkDict = new Dictionary<int, IBookmark>();
foreach (IBookmark bm in bookmarks) { foreach (IBookmark bm in manager.Bookmarks) {
int line = bm.LineNumber; int line = bm.LineNumber;
if (!bookmarkDict.ContainsKey(line)) if (!bookmarkDict.ContainsKey(line))
bookmarkDict.Add(line, bm); bookmarkDict.Add(line, bm);
@ -117,7 +103,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
VisualLine visualLine = textView.GetVisualLineFromVisualTop(e.GetPosition(textView).Y + textView.VerticalOffset); VisualLine visualLine = textView.GetVisualLineFromVisualTop(e.GetPosition(textView).Y + textView.VerticalOffset);
if (visualLine != null) { if (visualLine != null) {
int line = visualLine.FirstDocumentLine.LineNumber; int line = visualLine.FirstDocumentLine.LineNumber;
foreach (IBookmark bm in bookmarks) { foreach (IBookmark bm in manager.Bookmarks) {
if (bm.LineNumber == line) { if (bm.LineNumber == line) {
bm.MouseDown(e); bm.MouseDown(e);
if (e.Handled) if (e.Handled)

Loading…
Cancel
Save