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

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

@ -101,7 +101,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -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 @@ -111,17 +111,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
BookmarkManager.Added -= BookmarkManager_Added;
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) {
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 @@ -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<SDBookmark>()) {
foreach (SDBookmark bookmark in codeEditor.IconBarManager.Bookmarks.OfType<SDBookmark>()) {
bookmark.FileName = newFileName;
}
}

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

@ -39,7 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);

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

@ -0,0 +1,47 @@ @@ -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 @@ -22,31 +22,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
/// <summary>
/// Icon bar: contains breakpoints and other icons.
/// </summary>
public class IconBarMargin : AbstractMargin, IBookmarkMargin
public class IconBarMargin : AbstractMargin
{
#region IBookmarkMargin implementation
ObservableCollection<IBookmark> bookmarks = new ObservableCollection<IBookmark>();
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<IBookmark> Bookmarks {
get { return bookmarks; }
}
void bookmarks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
InvalidateVisual();
}
public void Redraw()
{
InvalidateVisual();
}
#endregion
#region OnTextViewChanged
/// <inheritdoc/>
protected override void OnTextViewChanged(TextView oldTextView, TextView newTextView)
@ -93,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -93,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (textView != null && textView.VisualLinesValid) {
// create a dictionary line number => first bookmark
Dictionary<int, IBookmark> bookmarkDict = new Dictionary<int, IBookmark>();
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 @@ -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)

Loading…
Cancel
Save