From 7e3a1fa4f05513b191fc0cc5c14483a1b03b2a34 Mon Sep 17 00:00:00 2001 From: Eusebiu Marcu Date: Thu, 2 Dec 2010 20:13:39 +0200 Subject: [PATCH] add SelectedFrameBookmark --- .../Debugger.AddIn/Debugger.AddIn.csproj | 1 + .../Pads/ParallelPad/ParallelStackPad.cs | 25 +++++++++++++++++-- .../Pads/ParallelPad/ThreadStack.xaml.cs | 18 +++++++++---- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj index c84a269c14..f1d8ee4c70 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj +++ b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj @@ -125,6 +125,7 @@ + ThreadStack.xaml Code diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs index 2df381742d..b1887c9bc0 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs @@ -13,9 +13,13 @@ using System.Windows.Media; using Debugger; using Debugger.AddIn.Pads.ParallelPad; using Debugger.AddIn.TreeModel; +using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.Core; using ICSharpCode.Core.Presentation; +using ICSharpCode.NRefactory; +using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Debugging; +using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Gui.Pads; namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -154,6 +158,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads { currentThreadStacks.Clear(); selectedFrame = null; + + // remove all + BookmarkManager.RemoveAll(b => b is SelectedFrameBookmark); } private void debuggedProcess_Paused(object sender, ProcessEventArgs e) @@ -436,7 +443,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads private void CreateThreadStack(Thread thread) { var items = CreateItems(thread); - if (items.Count == 0) + if (items == null || items.Count == 0) return; ThreadStack threadStack = new ThreadStack(); @@ -555,9 +562,21 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads return obj; } + private void ToggleSelectedFrameBookmark(Location location) + { + // remove all + BookmarkManager.RemoveAll(b => b is SelectedFrameBookmark); + + ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider; + if (provider != null) { + ITextEditor editor = provider.TextEditor; + BookmarkManager.AddMark(new SelectedFrameBookmark(editor.FileName, location)); + } + } + private void OnThreadStackSelected(object sender, EventArgs e) { - foreach (var ts in this.currentThreadStacks) { + foreach (var ts in this.currentThreadStacks.FindAll(ts => ts.ThreadStackChildren == null)) { if (ts.IsSelected) ts.IsSelected = false; ts.ClearImages(); @@ -568,6 +587,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads { selectedFrame = e.Item; + ToggleSelectedFrameBookmark(e.Location); + if (isMethodView) RefreshPad(); } diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs index 04f7f16bad..fb2899ae52 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs @@ -11,6 +11,7 @@ using System.Windows.Input; using System.Windows.Media; using ICSharpCode.Core.Presentation; +using ICSharpCode.NRefactory; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui.Pads; @@ -23,9 +24,15 @@ namespace Debugger.AddIn.Pads.ParallelPad private set; } - public FrameSelectedEventArgs(StackFrame item) + public Location Location { + get; + private set; + } + + public FrameSelectedEventArgs(StackFrame item, Location location) { Item = item; + Location = location; } } @@ -198,13 +205,14 @@ namespace Debugger.AddIn.Pads.ParallelPad SourcecodeSegment nextStatement = frame.NextStatement; if (nextStatement != null) { + var location = new Location(nextStatement.StartColumn, nextStatement.StartLine); FileService.JumpToFilePosition( - nextStatement.Filename, nextStatement.StartLine, nextStatement.StartColumn); + nextStatement.Filename, location.Line, location.Column); + + if (FrameSelected != null) + FrameSelected(this, new FrameSelectedEventArgs(frame, location)); } - if (FrameSelected != null) - FrameSelected(this, new FrameSelectedEventArgs(frame)); - break; } }