From be5e986e5be0b1d563dc2c4ffa0dffade747632a Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Tue, 18 Jun 2019 16:17:04 -0400 Subject: [Debugger] Port the DebugValueWindow over to the ObjectValueTreeViewController --- .../QuickInfo/DebuggerQuickInfoSource.cs | 3 +- .../MonoDevelop.Debugger/DebugValueWindow.cs | 105 ++++++++++++++------- .../MonoDevelop.Debugger/ExceptionCaughtDialog.cs | 1 - .../MonoDevelop.Debugger/GtkObjectValueTreeView.cs | 18 ++-- .../ObjectValueTreeViewController.cs | 21 +++++ .../DebugValueTooltipProvider.cs | 13 ++- 6 files changed, 108 insertions(+), 53 deletions(-) (limited to 'main/src') diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.VSTextView/QuickInfo/DebuggerQuickInfoSource.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.VSTextView/QuickInfo/DebuggerQuickInfoSource.cs index 0405f60bdf..50e7982712 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.VSTextView/QuickInfo/DebuggerQuickInfoSource.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.VSTextView/QuickInfo/DebuggerQuickInfoSource.cs @@ -38,7 +38,8 @@ namespace MonoDevelop.Debugger.VSTextView.QuickInfo { if (window == null) return; - var debuggerSession = window.Tree.Frame?.DebuggerSession; + + var debuggerSession = window.GetDebuggerSession (); if (debuggerSession == null || debuggerSession == sender) { DestroyWindow (); } diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebugValueWindow.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebugValueWindow.cs index 6303475bb1..c3a0712c3c 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebugValueWindow.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebugValueWindow.cs @@ -36,10 +36,13 @@ namespace MonoDevelop.Debugger { class DebugValueWindow : PopoverWindow { - public ObjectValueTreeView Tree { get; } - ScrolledWindow sw; + readonly ObjectValueTreeViewController controller; + readonly ObjectValueTreeView objValueTreeView; + readonly TreeView treeView; + readonly ScrolledWindow sw; static readonly string innerTreeName = "MonoDevelop.SourceEditor.DebugValueWindow.ObjectValueTreeView"; + static bool UseNewTreeView = true; static string currentBgColor; static DebugValueWindow () @@ -73,10 +76,10 @@ namespace MonoDevelop.Debugger public DebugValueWindow (Gtk.Window transientFor, string pinnedWatchFileName, int pinnedWatchLine, StackFrame frame, ObjectValue value, PinnedWatch watch) : base (Gtk.WindowType.Toplevel) { - this.TypeHint = WindowTypeHint.PopupMenu; - this.AllowShrink = false; - this.AllowGrow = false; - this.Decorated = false; + TypeHint = WindowTypeHint.PopupMenu; + AllowShrink = false; + AllowGrow = false; + Decorated = false; TransientFor = transientFor; // Avoid getting the focus when the window is shown. We'll get it when the mouse enters the window @@ -87,38 +90,68 @@ namespace MonoDevelop.Debugger sw.VscrollbarPolicy = PolicyType.Never; UpdateTreeStyle (Theme.BackgroundColor); - Tree = new ObjectValueTreeView (); - Tree.Name = innerTreeName; - sw.Add (Tree); - ContentBox.Add (sw); + if (UseNewTreeView) { + controller = new ObjectValueTreeViewController (); + controller.SetStackFrame (frame); + controller.RootPinAlwaysVisible = true; + controller.HeadersVisible = false; + controller.AllowEditing = true; + controller.AllowPinning = true; + controller.CompactView = true; + controller.PinnedWatch = watch; + controller.PinnedWatchLine = pinnedWatchLine; + controller.PinnedWatchFile = pinnedWatchFileName; + + controller.PinStatusChanged += OnPinStatusChanged; + controller.StartEditing += OnStartEditing; + controller.EndEditing += OnEndEditing; + + treeView = (TreeView) controller.GetControl (); + + controller.AddValue (value); + } else { + objValueTreeView = new ObjectValueTreeView (); + objValueTreeView.RootPinAlwaysVisible = true; + objValueTreeView.HeadersVisible = false; + objValueTreeView.AllowEditing = true; + objValueTreeView.AllowPinning = true; + objValueTreeView.CompactView = true; + objValueTreeView.PinnedWatch = watch; + objValueTreeView.PinnedWatchLine = pinnedWatchLine; + objValueTreeView.PinnedWatchFile = pinnedWatchFileName; + objValueTreeView.Frame = frame; + + objValueTreeView.AddValue (value); + + objValueTreeView.PinStatusChanged += OnPinStatusChanged; + objValueTreeView.StartEditing += OnStartEditing; + objValueTreeView.EndEditing += OnEndEditing; + + treeView = objValueTreeView; + } - Tree.Frame = frame; - Tree.CompactView = true; - Tree.AllowAdding = false; - Tree.AllowEditing = true; - Tree.HeadersVisible = false; - Tree.AllowPinning = true; - Tree.RootPinAlwaysVisible = true; - Tree.PinnedWatch = watch; - Tree.PinnedWatchLine = pinnedWatchLine; - Tree.PinnedWatchFile = pinnedWatchFileName; - - Tree.AddValue (value); - Tree.Selection.UnselectAll (); - Tree.SizeAllocated += OnTreeSizeChanged; - Tree.PinStatusChanged += OnPinStatusChanged; + treeView.Name = innerTreeName; + treeView.Selection.UnselectAll (); + treeView.SizeAllocated += OnTreeSizeChanged; + sw.Add (treeView); + ContentBox.Add (sw); sw.ShowAll (); - Tree.StartEditing += OnStartEditing; - Tree.EndEditing += OnEndEditing; - ShowArrow = true; Theme.CornerRadius = 3; PreviewWindowManager.WindowClosed += PreviewWindowManager_WindowClosed; } + public DebuggerSession GetDebuggerSession () + { + if (UseNewTreeView) + return controller.GetStackFrame ()?.DebuggerSession; + + return objValueTreeView.Frame?.DebuggerSession; + } + void OnStartEditing (object sender, EventArgs args) { Modal = true; @@ -136,10 +169,18 @@ namespace MonoDevelop.Debugger protected override void OnDestroyed () { - Tree.StartEditing -= OnStartEditing; - Tree.EndEditing -= OnEndEditing; - Tree.PinStatusChanged -= OnPinStatusChanged; - Tree.SizeAllocated -= OnTreeSizeChanged; + if (UseNewTreeView) { + controller.PinStatusChanged -= OnPinStatusChanged; + controller.StartEditing -= OnStartEditing; + controller.EndEditing -= OnEndEditing; + } else { + objValueTreeView.PinStatusChanged -= OnPinStatusChanged; + objValueTreeView.StartEditing -= OnStartEditing; + objValueTreeView.EndEditing -= OnEndEditing; + } + + treeView.SizeAllocated -= OnTreeSizeChanged; + PreviewWindowManager.WindowClosed -= PreviewWindowManager_WindowClosed; base.OnDestroyed (); diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExceptionCaughtDialog.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExceptionCaughtDialog.cs index 5a2fe3c146..f3e9a4d829 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExceptionCaughtDialog.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExceptionCaughtDialog.cs @@ -198,7 +198,6 @@ widget ""*.exception_help_link_label"" style ""exception-help-link-label"" ExceptionValueTreeView.AllowEditing = false; ExceptionValueTreeView.CanFocus = true; ExceptionValueTreeView.AllowAdding = false; - ExceptionValueTreeView.RulesHint = true; ExceptionValueTreeView.ModifyFont (Pango.FontDescription.FromString (Platform.IsWindows ? "9" : "11")); ExceptionValueTreeView.RulesHint = false; diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/GtkObjectValueTreeView.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/GtkObjectValueTreeView.cs index 2fd457f9fd..64ade2bf57 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/GtkObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/GtkObjectValueTreeView.cs @@ -126,10 +126,6 @@ namespace MonoDevelop.Debugger const int ValueButtonTextColumn = 15; const int ObjectNodeColumn = 16; - public event EventHandler StartEditing; - public event EventHandler EndEditing; - public event EventHandler PinStatusChanged; - enum LocalCommands { AddWatch @@ -956,8 +952,8 @@ public StackFrame Frame { editEntry = (Entry)args.Editable; editEntry.KeyPressEvent += OnEditKeyPress; editEntry.KeyReleaseEvent += OnEditKeyRelease; - if (StartEditing != null) - StartEditing (this, EventArgs.Empty); + + controller.OnStartEditing (); } void OnEndEditing () @@ -968,8 +964,8 @@ public StackFrame Frame { CompletionWindowManager.HideWindow (); currentCompletionData = null; - if (EndEditing != null) - EndEditing (this, EventArgs.Empty); + + controller.OnEndEditing (); } void OnEditKeyRelease (object sender, EventArgs e) @@ -1616,15 +1612,13 @@ public StackFrame Frame { watch.Expression = expression; DebuggingService.PinnedWatches.Add (watch); - if (PinStatusChanged != null) - PinStatusChanged (this, EventArgs.Empty); + controller.OnPinStatusChanged (); } public void RemovePinnedWatch (TreeIter it) { DebuggingService.PinnedWatches.Remove (controller.PinnedWatch); - if (PinStatusChanged != null) - PinStatusChanged (this, EventArgs.Empty); + controller.OnPinStatusChanged (); } #region ICompletionWidget implementation diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValueTreeViewController.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValueTreeViewController.cs index 1896c36d7a..6cff774879 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValueTreeViewController.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValueTreeViewController.cs @@ -194,6 +194,27 @@ namespace MonoDevelop.Debugger } } + public event EventHandler PinStatusChanged; + + internal void OnPinStatusChanged () + { + PinStatusChanged?.Invoke (this, EventArgs.Empty); + } + + public event EventHandler StartEditing; + + internal void OnStartEditing () + { + StartEditing?.Invoke (this, EventArgs.Empty); + } + + public event EventHandler EndEditing; + + internal void OnEndEditing () + { + EndEditing?.Invoke (this, EventArgs.Empty); + } + public event EventHandler ChildrenLoaded; /// diff --git a/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/DebugValueTooltipProvider.cs b/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/DebugValueTooltipProvider.cs index 7258d4ed36..1cec611cda 100644 --- a/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/DebugValueTooltipProvider.cs +++ b/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/DebugValueTooltipProvider.cs @@ -27,17 +27,15 @@ // using System; -using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +using Mono.Debugging.Client; using MonoDevelop.Ide; -using MonoDevelop.Ide.Gui; using MonoDevelop.Debugger; using MonoDevelop.Components; -using Mono.Debugging.Client; - using MonoDevelop.Ide.Editor; -using System.Threading.Tasks; -using System.Threading; namespace MonoDevelop.SourceEditor { @@ -61,7 +59,8 @@ namespace MonoDevelop.SourceEditor { if (tooltip == null) return; - var debuggerSession = tooltip.Tree.Frame?.DebuggerSession; + + var debuggerSession = tooltip.GetDebuggerSession (); if (debuggerSession == null || debuggerSession == sender) { tooltip.Destroy (); tooltip = null; -- cgit v1.2.3