Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Munn <gregm@microsoft.com>2019-07-25 20:30:54 +0300
committerGreg Munn <gregm@microsoft.com>2019-07-25 20:30:54 +0300
commit6ee6fc0b3e817df0e6eb0790a5f36a65aa6480c1 (patch)
tree7dc4de43892bc06e208bbd175e963258c2223c19 /main/src/addins
parent85a700897919546182c639c094eeda99dffd3bf3 (diff)
[ObjectValue] Some more refactoring to invert controller and view communication
Diffstat (limited to 'main/src/addins')
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/DebuggerObjectValueNode.cs19
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Gtk/GtkObjectValueTreeView.cs42
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs5
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNode.cs9
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs4
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)