From 09e8eacea6d5d588fa463360331e50253fb3f474 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 15 Aug 2014 12:51:06 +0200 Subject: [PATCH] enhance bookmark tooltips: allow breakpoint tooltip to be displayed even if CurrentLineBookmark is on the same line. --- .../Debugger.AddIn/Breakpoints/BreakpointBookmark.cs | 4 ++++ .../DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs | 8 ++++++-- src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs | 4 ++++ src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs | 4 ++++ src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs | 5 +++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs index 6ea6bb3a16..893eb203ae 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs @@ -152,6 +152,10 @@ namespace Debugger.AddIn.Breakpoints return string.Format("{0} @{1}", this.FileName, this.LineNumber); } + public override bool DisplaysTooltip { + get { return true; } + } + public override object CreateTooltipContent() { return new BreakpointEditorPopup(this) { diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs index 24f8b416da..ec63f87575 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; @@ -286,7 +287,10 @@ namespace ICSharpCode.AvalonEdit.AddIn int line = GetLineFromMousePosition(e); if (line < 1) return; - IBookmark bm = GetBookmarkFromLine(line); + IBookmark bm = manager.Bookmarks + .Where(m => m.LineNumber == line && m.DisplaysTooltip) + .OrderBy(m => m.ZOrder) + .FirstOrDefault(); if (bm == null) return; object content = bm.CreateTooltipContent(); popupToolTip = content as Popup; @@ -301,7 +305,7 @@ namespace ICSharpCode.AvalonEdit.AddIn e.Handled = true; popupToolTip.IsOpen = true; distanceToPopupLimit = double.PositiveInfinity; // reset limit; we'll re-calculate it on the next mouse movement - } else { + } else if (content != null) { if (toolTip == null) { toolTip = new ToolTip(); toolTip.Closed += ToolTipClosed; diff --git a/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs b/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs index 1f060e0787..e1fbb0accf 100644 --- a/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs +++ b/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs @@ -195,6 +195,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks { } + public virtual bool DisplaysTooltip { + get { return false; } + } + public virtual object CreateTooltipContent() { return null; diff --git a/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs b/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs index 1c077f4d45..26825bd7c7 100644 --- a/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs +++ b/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs @@ -98,6 +98,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks throw new NotSupportedException(); } + bool IBookmark.DisplaysTooltip { + get { return false; } + } + object IBookmark.CreateTooltipContent() { return null; diff --git a/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs b/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs index c80366c656..07efd13911 100644 --- a/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs +++ b/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs @@ -61,6 +61,11 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks /// void Drop(int lineNumber); + /// + /// Gets whether this bookmark might want to display a tooltip. + /// + bool DisplaysTooltip { get; } + /// /// Creates the tooltip content for the bookmark. ///