diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/NodeControl.xaml.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/NodeControl.xaml.cs index 993ef83f94..946d73eb0f 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/NodeControl.xaml.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/NodeControl.xaml.cs @@ -67,7 +67,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing var row = new RowDefinition(); propertyGrid.RowDefinitions.Add(row); - if (!property.IsAtomic) + if (!property.IsAtomic && !property.IsNull) { Button btnExpandCollapse = new Button(); btnExpandCollapse.Tag = property; diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ExpandedNodes.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ExpandedNodes.cs index 8f29e49dde..8dc6dbb28d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ExpandedNodes.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ExpandedNodes.cs @@ -25,12 +25,12 @@ namespace Debugger.AddIn.Visualizers.Graph return expandedNodes.ContainsKey(expression) && (expandedNodes[expression] == true); } - public void Expand(string expression) + public void SetExpanded(string expression) { expandedNodes[expression] = true; } - public void Collapse(string expression) + public void SetCollapsed(string expression) { expandedNodes[expression] = false; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedNodeProperty.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedNodeProperty.cs index 85fc4ac103..596b4087e1 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedNodeProperty.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedNodeProperty.cs @@ -67,5 +67,10 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout /// Is this property of atomic type? (int, string, etc.) /// public bool IsAtomic { get { return this.objectProperty.IsAtomic; } } + + /// + /// Is the value of this property null? + /// + public bool IsNull { get { return this.objectProperty.IsNull; } } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs index 78e7f0992e..481e54f704 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/NeatoProcess.cs @@ -73,10 +73,10 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout /// Same graph in Graphviz plain with position information added. public string CalculatePositions(string dotGraph) { - using (var writer = new StreamWriter(@"D:\__prog__\Graphviz\logIn.gv")) + /*using (var writer = new StreamWriter("logIn.gv")) { writer.Write(dotGraph); - } + }*/ neatoProcess.StandardInput.Write(dotGraph); neatoProcess.StandardInput.Flush(); diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs index 2984c6db57..5daaabf17d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs @@ -136,7 +136,8 @@ namespace Debugger.AddIn.Visualizers.Graph else { ObjectNode targetNode = null; - if (!isNull(memberExpr) && expandedNodes.IsExpanded(memberExpr.Code)) + bool memberIsNull = isNull(memberExpr); + if (!memberIsNull && expandedNodes.IsExpanded(memberExpr.Code)) { // for object members, edges are added Value memberValue = getPermanentReference(memberExpr); @@ -153,7 +154,7 @@ namespace Debugger.AddIn.Visualizers.Graph { targetNode = null; } - thisNode.AddComplexProperty(memberName, "", memberExpr, targetNode); + thisNode.AddComplexProperty(memberName, "", memberExpr, targetNode, memberIsNull); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectNode.cs index 71ed241064..61ecc65193 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectNode.cs @@ -103,10 +103,10 @@ namespace Debugger.AddIn.Visualizers.Graph /// /// Adds complex property. /// - internal void AddComplexProperty(string name, string value, Expression expression, ObjectNode targetNode) + internal void AddComplexProperty(string name, string value, Expression expression, ObjectNode targetNode, bool isNull) { properties.Add(new ObjectProperty - { Name = name, Value = value, Expression = expression, IsAtomic = false, TargetNode = targetNode }); + { Name = name, Value = value, Expression = expression, IsAtomic = false, TargetNode = targetNode, IsNull = isNull }); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectProperty.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectProperty.cs index 52490e4235..b6416bf0e2 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectProperty.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/ObjectGraph/ObjectProperty.cs @@ -30,14 +30,19 @@ namespace Debugger.AddIn.Visualizers.Graph /// public Debugger.Expressions.Expression Expression { get; set; } + /// + /// Is this property of atomic type? (int, string, etc.) + /// + public bool IsAtomic { get; set; } + /// /// Node that this property points to. Can be null. Always null if is true. /// public ObjectNode TargetNode { get; set; } /// - /// Is this property of atomic type? (int, string, etc.) + /// Is this property value null? Only meaningful if is false. /// - public bool IsAtomic { get; set; } + public bool IsNull { get; set; } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs index a8aea03512..08457c8a09 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs @@ -146,13 +146,13 @@ namespace Debugger.AddIn.Visualizers.Graph void node_Expanded(object sender, PositionedPropertyEventArgs e) { - expandedNodes.Expand(e.Property.Expression.Code); + expandedNodes.SetExpanded(e.Property.Expression.Code); refreshGraph(); } void node_Collapsed(object sender, PositionedPropertyEventArgs e) { - expandedNodes.Collapse(e.Property.Expression.Code); + expandedNodes.SetCollapsed(e.Property.Expression.Code); refreshGraph(); } }