diff options
author | Greg Munn <gregm@microsoft.com> | 2019-07-25 20:30:54 +0300 |
---|---|---|
committer | Greg Munn <gregm@microsoft.com> | 2019-07-25 20:30:54 +0300 |
commit | 6ee6fc0b3e817df0e6eb0790a5f36a65aa6480c1 (patch) | |
tree | 7dc4de43892bc06e208bbd175e963258c2223c19 /main/src/addins | |
parent | 85a700897919546182c639c094eeda99dffd3bf3 (diff) |
[ObjectValue] Some more refactoring to invert controller and view communication
Diffstat (limited to 'main/src/addins')
5 files changed, 48 insertions, 31 deletions
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/DebuggerObjectValueNode.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/DebuggerObjectValueNode.cs index e7235408df..697d61da53 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/DebuggerObjectValueNode.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/DebuggerObjectValueNode.cs @@ -51,6 +51,25 @@ namespace MonoDevelop.Debugger // TODO: try and make this private public ObjectValue DebuggerObject { get; } + /// <summary> + /// Gets the expression for the node that can be used when pinning node + /// </summary> + public override string Expression { + get { + string expression = ""; + + var node = this; + var name = node.Name; + while (node != null && node.Parent is DebuggerObjectValueNode) { + expression = node.DebuggerObject.ChildSelector + expression; + node = (DebuggerObjectValueNode)node.Parent; + name = node.Name; + } + + return name + expression; + } + } + public override bool HasChildren => DebuggerObject.HasChildren; public override bool IsEnumerable => DebuggerObject.Flags.HasFlag (ObjectValueFlags.IEnumerable); public override bool IsEvaluating => DebuggerObject.IsEvaluating; diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Gtk/GtkObjectValueTreeView.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Gtk/GtkObjectValueTreeView.cs index 62f92a354f..69bbc654a2 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Gtk/GtkObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Gtk/GtkObjectValueTreeView.cs @@ -345,6 +345,14 @@ namespace MonoDevelop.Debugger } } + /// <summary> + /// Gets a value indicating the offset required for pinned watches + /// </summary> + public int PinnedWatchOffset { + get { + return SizeRequest ().Height; + } + } /// <summary> /// Triggered when the view requests a node to fetch more of it's children @@ -1571,7 +1579,8 @@ namespace MonoDevelop.Debugger TreeIter it; if (store.GetIter (out it, tp)) { - var expression = GetFullExpression (it); + var node = GetNodeAtIter (it); + var expression = node.Expression; if (!string.IsNullOrEmpty (expression)) expressions.Add (expression); @@ -1657,43 +1666,18 @@ namespace MonoDevelop.Debugger return false; } - string GetFullExpression (TreeIter it) - { - var path = store.GetPath (it); - string name, expression = ""; - - while (path.Depth != 1) { - var val = GetDebuggerObjectValueAtIter (it); - if (val == null) - return null; - - expression = val.ChildSelector + expression; - if (!store.IterParent (out it, it)) - break; - - path = store.GetPath (it); - } - - name = (string) store.GetValue (it, NameColumn); - - return name + expression; - } - void CreatePinnedWatch (TreeIter it) { - var expression = GetFullExpression (it); + var node = GetNodeAtIter (it); + var expression = node.Expression; if (string.IsNullOrEmpty (expression)) return; - var height = SizeRequest ().Height; - if (PinnedWatch != null) CollapseAll (); - // TODO: move this to NodePinned?.Invoke - NodePinned?.Invoke (this, null); - controller.CreatePinnedWatch (expression, height); + NodePinned?.Invoke (this, new ObjectValueNodeEventArgs(node)); } #region ICompletionWidget implementation diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs index dbed8c2ce6..57e704b0f1 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs @@ -54,6 +54,11 @@ namespace MonoDevelop.Debugger PinnedWatch PinnedWatch { get; set; } /// <summary> + /// Gets a value indicating the offset required for pinned watches + /// </summary> + int PinnedWatchOffset { get; } + + /// <summary> /// Reloads the tree from the root node /// </summary> void Reload (ObjectValueNode root); diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNode.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNode.cs index 2aa9de0418..a30a300b0b 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNode.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNode.cs @@ -69,6 +69,15 @@ namespace MonoDevelop.Debugger } /// <summary> + /// Gets the expression for the node that can be used when pinning node + /// </summary> + public virtual string Expression { + get { + return Name; + } + } + + /// <summary> /// Gets the collection of children that have been loaded from the debugger /// </summary> public IReadOnlyList<ObjectValueNode> Children => children; diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs index 2b37c054b5..a6ad7b64f5 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs @@ -158,7 +158,7 @@ namespace MonoDevelop.Debugger } } - public void CreatePinnedWatch (string expression, int height) + void CreatePinnedWatch (string expression, int height) { var watch = new PinnedWatch (); @@ -571,7 +571,7 @@ namespace MonoDevelop.Debugger void OnViewNodePinned (object sender, ObjectValueNodeEventArgs e) { - //CreatePinnedWatch (e.Node.Name, ); + CreatePinnedWatch (e.Node.Expression, view.PinnedWatchOffset); } void OnViewNodeUnpinned (object sender, EventArgs e) |