diff options
author | Greg Munn <gregm@microsoft.com> | 2019-07-25 21:00:01 +0300 |
---|---|---|
committer | Greg Munn <gregm@microsoft.com> | 2019-07-25 21:00:01 +0300 |
commit | 078fddba50e186a770c11090cf9fd099f0493d89 (patch) | |
tree | e2021c0dfc9309ae95dcde92f6ddf6432e6aa28e | |
parent | 6ee6fc0b3e817df0e6eb0790a5f36a65aa6480c1 (diff) |
[ObjectValue] Some more refactoring to invert controller and view communication
4 files changed, 51 insertions, 42 deletions
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 69bbc654a2..8fad8a33e3 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 @@ -367,7 +367,7 @@ namespace MonoDevelop.Debugger /// <summary> /// Triggered when the view needs to know if the node can be edited /// </summary> - public event EventHandler<ObjectValueCanEditEventArgs> NodeGetCanEdit; + public event EventHandler<ObjectValueNodeEventArgs> NodeGetCanEdit; /// <summary> /// Triggered when the node's value has been edited by the user @@ -380,24 +380,29 @@ namespace MonoDevelop.Debugger public event EventHandler<ObjectValueNodeEventArgs> NodeRemoved; /// <summary> - /// Triggered when an expression is added to the tree by the user + /// Triggered when the user pins the node /// </summary> - public event EventHandler<ObjectValueExpressionEventArgs> ExpressionAdded; + public event EventHandler<ObjectValueNodeEventArgs> NodePinned; /// <summary> - /// Triggered when an expression is edited by the user + /// Triggered when the pinned watch is removed by the user /// </summary> - public event EventHandler<ObjectValueExpressionEventArgs> ExpressionEdited; + public event EventHandler<EventArgs> NodeUnpinned; /// <summary> - /// Triggered when the user pins the node + /// Triggered when the visualiser for the node should be shown /// </summary> - public event EventHandler<ObjectValueNodeEventArgs> NodePinned; + public event EventHandler<ObjectValueNodeEventArgs> NodeShowVisualiser; /// <summary> - /// Triggered when the pinned watch is removed by the user + /// Triggered when an expression is added to the tree by the user /// </summary> - public event EventHandler<EventArgs> NodeUnpinned; + public event EventHandler<ObjectValueExpressionEventArgs> ExpressionAdded; + + /// <summary> + /// Triggered when an expression is edited by the user + /// </summary> + public event EventHandler<ObjectValueExpressionEventArgs> ExpressionEdited; /// <summary> /// Triggered when the user starts editing a node @@ -894,9 +899,9 @@ namespace MonoDevelop.Debugger bool GetCanEditNode(ObjectValueNode node) { - var args = new ObjectValueCanEditEventArgs (node); + var args = new ObjectValueNodeEventArgs (node); NodeGetCanEdit?.Invoke (this, args); - return args.CanEdit; + return args.Response is bool b && b; } protected override bool OnTestExpandRow (TreeIter iter, TreePath path) @@ -989,7 +994,7 @@ namespace MonoDevelop.Debugger ExpressionAdded?.Invoke (this, new ObjectValueExpressionEventArgs (null, args.NewText)); } } else { - ExpressionEdited?.Invoke (this, new ObjectValueExpressionEventArgs (null, args.NewText)); + ExpressionEdited?.Invoke (this, new ObjectValueExpressionEventArgs (node, args.NewText)); } } @@ -1032,9 +1037,7 @@ namespace MonoDevelop.Debugger var val = GetNodeAtIter (iter); var editArgs = new ObjectValueEditEventArgs (val, args.NewText); NodeEditValue?.Invoke (this, editArgs); - if (editArgs.Edited) { - // update the store - //store.SetValue (it, ValueColumn, val.GetDisplayValue()); + if (editArgs.Response is bool b && b) { SetValues (TreeIter.Zero, iter, null, val); } } @@ -1335,7 +1338,10 @@ namespace MonoDevelop.Debugger if (cr == crpViewer) { clickProcessed = true; var node = GetNodeAtIter (it); - if (controller.ShowNodeValueVisualizer (node)) { + + var nodeArgs = new ObjectValueNodeEventArgs (node); + NodeShowVisualiser?.Invoke (this, nodeArgs); + if (nodeArgs.Response is bool b && b) { SetValues (TreeIter.Zero, it, null, node); } } else if (cr == crtExp && !PreviewWindowManager.IsVisible && ValidObjectForPreviewIcon (it)) { 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 57e704b0f1..e249f6ac44 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/IObjectValueTreeView.cs @@ -92,7 +92,7 @@ namespace MonoDevelop.Debugger /// <summary> /// Triggered when the view needs to know if the node can be edited /// </summary> - event EventHandler<ObjectValueCanEditEventArgs> NodeGetCanEdit; + event EventHandler<ObjectValueNodeEventArgs> NodeGetCanEdit; /// <summary> /// Triggered when the node's value has been edited by the user @@ -104,27 +104,32 @@ namespace MonoDevelop.Debugger /// </summary> event EventHandler<ObjectValueNodeEventArgs> NodeRemoved; - //event EventHandler<ObjectValueDisplayEventArgs> NodeGetDisplayText; + /// <summary> + /// Triggered when the user pins the node + /// </summary> + event EventHandler<ObjectValueNodeEventArgs> NodePinned; /// <summary> - /// Triggered when an expression is added to the tree by the user + /// Triggered when the pinned watch is removed by the user /// </summary> - event EventHandler<ObjectValueExpressionEventArgs> ExpressionAdded; + event EventHandler<EventArgs> NodeUnpinned; /// <summary> - /// Triggered when an expression is edited by the user + /// Triggered when the visualiser for the node should be shown /// </summary> - event EventHandler<ObjectValueExpressionEventArgs> ExpressionEdited; + event EventHandler<ObjectValueNodeEventArgs> NodeShowVisualiser; + + //event EventHandler<ObjectValueDisplayEventArgs> NodeGetDisplayText; /// <summary> - /// Triggered when the user pins the node + /// Triggered when an expression is added to the tree by the user /// </summary> - event EventHandler<ObjectValueNodeEventArgs> NodePinned; + event EventHandler<ObjectValueExpressionEventArgs> ExpressionAdded; /// <summary> - /// Triggered when the pinned watch is removed by the user + /// Triggered when an expression is edited by the user /// </summary> - event EventHandler<EventArgs> NodeUnpinned; + event EventHandler<ObjectValueExpressionEventArgs> ExpressionEdited; void OnNodeExpanded (ObjectValueNode node); diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNodeEventArgs.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNodeEventArgs.cs index e2982e033e..64951fbd09 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNodeEventArgs.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueNodeEventArgs.cs @@ -38,15 +38,11 @@ namespace MonoDevelop.Debugger public ObjectValueNode Node { get; private set; } - } - - public sealed class ObjectValueCanEditEventArgs : ObjectValueNodeEventArgs - { - public ObjectValueCanEditEventArgs (ObjectValueNode node) : base (node) - { - } - public bool CanEdit { + /// <summary> + /// Gets or sets a value indicating a response to the caller of the event + /// </summary> + public object Response { get; set; } } @@ -61,10 +57,6 @@ namespace MonoDevelop.Debugger public string NewValue { get; private set; } - - public bool Edited { - get; set; - } } public sealed class ObjectValueDisplayEventArgs : ObjectValueNodeEventArgs 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 a6ad7b64f5..31c95a4aa2 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs @@ -204,6 +204,7 @@ namespace MonoDevelop.Debugger view.NodeRemoved += OnViewNodeRemoved; view.NodePinned += OnViewNodePinned; view.NodeUnpinned += OnViewNodeUnpinned; + view.NodeShowVisualiser += OnViewNodeShowVisualiser; return view; } @@ -450,7 +451,7 @@ namespace MonoDevelop.Debugger return true; } - public bool ShowNodeValueVisualizer (ObjectValueNode node) + bool ShowNodeValueVisualizer (ObjectValueNode node) { if (node != null) { @@ -554,14 +555,14 @@ namespace MonoDevelop.Debugger RefreshNode (e.Node); } - void OnViewNodeCanEdit (object sender, ObjectValueCanEditEventArgs e) + void OnViewNodeCanEdit (object sender, ObjectValueNodeEventArgs e) { - e.CanEdit = CanEditObject (e.Node); + e.Response = CanEditObject (e.Node); } void OnViewNodeEditValue (object sender, ObjectValueEditEventArgs e) { - e.Edited = EditNodeValue (e.Node, e.NewValue); + e.Response = EditNodeValue (e.Node, e.NewValue); } void OnViewNodeRemoved (object sender, ObjectValueNodeEventArgs e) @@ -569,6 +570,11 @@ namespace MonoDevelop.Debugger RemoveValue (e.Node); } + void OnViewNodeShowVisualiser (object sender, ObjectValueNodeEventArgs e) + { + e.Response = ShowNodeValueVisualizer (e.Node); + } + void OnViewNodePinned (object sender, ObjectValueNodeEventArgs e) { CreatePinnedWatch (e.Node.Expression, view.PinnedWatchOffset); |