Browse Source

Object graph visualizer - recalculate layout on expand/collapse of content nodes.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4408 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 17 years ago
parent
commit
f6e3e7674a
  1. 1
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 31
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs
  3. 27
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/NestedNodeViewModelEventArgs.cs
  4. 48
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs
  5. 21
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs

1
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -132,6 +132,7 @@ @@ -132,6 +132,7 @@
<DependentUpon>PositionedGraphNodeControl.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Visualizers\Graph\Layout\NestedNodeViewModelEventArgs.cs" />
<Compile Include="Src\Visualizers\Graph\Layout\PropertyNodeViewModel.cs" />
<Compile Include="Src\Visualizers\Graph\Layout\NestedNodeViewModel.cs" />
<Compile Include="Src\Visualizers\Graph\ObjectGraph\NamedEdge.cs" />

31
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Drawing/PositionedGraphNodeControl.xaml.cs

@ -27,14 +27,23 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing @@ -27,14 +27,23 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing
public partial class PositionedGraphNodeControl : UserControl
{
/// <summary>
/// Occurs when a <see cref="PositionedNodeProperty"/> is expanded.
/// Occurs when <see cref="PositionedNodeProperty"/> is expanded.
/// </summary>
public event EventHandler<PositionedPropertyEventArgs> PropertyExpanded;
/// <summary>
/// Occurs when a <see cref="PositionedNodeProperty"/> is collaped.
/// Occurs when <see cref="PositionedNodeProperty"/> is collaped.
/// </summary>
public event EventHandler<PositionedPropertyEventArgs> PropertyCollapsed;
/// <summary>
/// Occurs when <see cref="NesteNodeViewModel"/> is expanded.
/// </summary>
public event EventHandler<NestedNodeViewModelEventArgs> ContentNodeExpanded;
/// <summary>
/// Occurs when <see cref="NesteNodeViewModel"/> is collaped.
/// </summary>
public event EventHandler<NestedNodeViewModelEventArgs> ContentNodeCollapsed;
// shown in the ListView
private ObservableCollection<NestedNodeViewModel> view = new ObservableCollection<NestedNodeViewModel>();
@ -103,6 +112,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing @@ -103,6 +112,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing
this.view.Insert(clickedIndex + i, childNode);
i++;
}
OnContentNodeExpanded(clickedNode);
}
else
{
@ -112,6 +122,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing @@ -112,6 +122,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing
{
this.view.RemoveAt(clickedIndex + 1);
}
OnContentNodeCollapsed(clickedNode);
}
// set to Auto again to resize columns
@ -147,17 +158,25 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing @@ -147,17 +158,25 @@ namespace Debugger.AddIn.Visualizers.Graph.Drawing
protected virtual void OnPropertyExpanded(PositionedNodeProperty property)
{
if (this.PropertyExpanded != null)
{
this.PropertyExpanded(this, new PositionedPropertyEventArgs(property));
}
}
protected virtual void OnPropertyCollapsed(PositionedNodeProperty property)
{
if (this.PropertyCollapsed != null)
{
this.PropertyCollapsed(this, new PositionedPropertyEventArgs(property));
}
}
protected virtual void OnContentNodeExpanded(NestedNodeViewModel node)
{
if (this.ContentNodeExpanded != null)
this.ContentNodeExpanded(this, new NestedNodeViewModelEventArgs(node));
}
protected virtual void OnContentNodeCollapsed(NestedNodeViewModel node)
{
if (this.ContentNodeCollapsed != null)
this.ContentNodeCollapsed(this, new NestedNodeViewModelEventArgs(node));
}
#endregion
}

27
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/NestedNodeViewModelEventArgs.cs

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System.Collections.Generic;
using System.Linq;
using System;
namespace Debugger.AddIn.Visualizers.Graph.Layout
{
/// <summary>
/// EventArgs carrying <see cref="NestedNodeViewModel"/>.
/// </summary>
public class NestedNodeViewModelEventArgs : EventArgs
{
private NestedNodeViewModel node;
public NestedNodeViewModelEventArgs(NestedNodeViewModel node)
{
this.node = node;
}
public NestedNodeViewModel Node { get { return this.node; } }
}
}

48
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/PositionedGraphNode.cs

@ -9,6 +9,7 @@ using System.Collections.Generic; @@ -9,6 +9,7 @@ using System.Collections.Generic;
using Debugger.AddIn.Visualizers.Graph.Drawing;
using System.Windows;
using System.Linq;
using Debugger.AddIn.Visualizers.Utils;
namespace Debugger.AddIn.Visualizers.Graph.Layout
{
@ -24,11 +25,13 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -24,11 +25,13 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
public PositionedGraphNode(ObjectGraphNode objectNode)
{
this.objectNode = objectNode;
createVisualControl();
initVisualControl();
}
public event EventHandler<PositionedPropertyEventArgs> PropertyExpanded;
public event EventHandler<PositionedPropertyEventArgs> PropertyCollapsed;
public event EventHandler<NestedNodeViewModelEventArgs> ContentNodeExpanded;
public event EventHandler<NestedNodeViewModelEventArgs> ContentNodeCollapsed;
private ObjectGraphNode objectNode;
/// <summary>
@ -42,8 +45,8 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -42,8 +45,8 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
/// <summary>
/// Tree-of-properties content of this node.
/// </summary>
public NestedNodeViewModel Content
{
public NestedNodeViewModel Content
{
get; set;
}
@ -67,13 +70,16 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -67,13 +70,16 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
this.nodeVisualControl.Root = this.Content;
}
private void createVisualControl()
private void initVisualControl()
{
this.nodeVisualControl = new PositionedGraphNodeControl();
this.nodeVisualControl.MaxHeight = 200;
this.nodeVisualControl.PropertyExpanded += new EventHandler<PositionedPropertyEventArgs>(NodeVisualControl_Expanded);
this.nodeVisualControl.PropertyCollapsed += new EventHandler<PositionedPropertyEventArgs>(NodeVisualControl_Collapsed);
// propagate events from nodeVisualControl
this.nodeVisualControl.PropertyExpanded += new EventHandler<PositionedPropertyEventArgs>(NodeVisualControl_PropertyExpanded);
this.nodeVisualControl.PropertyCollapsed += new EventHandler<PositionedPropertyEventArgs>(NodeVisualControl_PropertyCollapsed);
this.nodeVisualControl.ContentNodeExpanded += new EventHandler<NestedNodeViewModelEventArgs>(NodeVisualControl_ContentNodeExpanded);
this.nodeVisualControl.ContentNodeCollapsed += new EventHandler<NestedNodeViewModelEventArgs>(NodeVisualControl_ContentNodeCollapsed);
}
public IEnumerable<PositionedNodeProperty> Properties
@ -125,32 +131,28 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -125,32 +131,28 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
public Rect Rect { get { return new Rect(Left, Top, Width, Height); } }
#region event helpers
private void NodeVisualControl_Expanded(object sender, PositionedPropertyEventArgs e)
private void NodeVisualControl_PropertyExpanded(object sender, PositionedPropertyEventArgs e)
{
// propagage event
OnPropertyExpanded(this, e);
if (this.PropertyExpanded != null)
this.PropertyExpanded(sender, e);
}
private void NodeVisualControl_Collapsed(object sender, PositionedPropertyEventArgs e)
private void NodeVisualControl_PropertyCollapsed(object sender, PositionedPropertyEventArgs e)
{
// propagate event
OnPropertyCollapsed(this, e);
if (this.PropertyCollapsed != null)
this.PropertyCollapsed(sender, e);
}
protected virtual void OnPropertyExpanded(object sender, PositionedPropertyEventArgs propertyArgs)
private void NodeVisualControl_ContentNodeExpanded(object sender, NestedNodeViewModelEventArgs e)
{
if (this.PropertyExpanded != null)
{
this.PropertyExpanded(sender, propertyArgs);
}
if (this.ContentNodeExpanded != null)
this.ContentNodeExpanded(sender, e);
}
protected virtual void OnPropertyCollapsed(object sender, PositionedPropertyEventArgs propertyArgs)
private void NodeVisualControl_ContentNodeCollapsed(object sender, NestedNodeViewModelEventArgs e)
{
if (this.PropertyCollapsed != null)
{
this.PropertyCollapsed(sender, propertyArgs);
}
if (this.ContentNodeCollapsed != null)
this.ContentNodeCollapsed(sender, e);
}
#endregion
}

21
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/VisualizerWPFWindow.xaml.cs

@ -153,12 +153,25 @@ namespace Debugger.AddIn.Visualizers.Graph @@ -153,12 +153,25 @@ namespace Debugger.AddIn.Visualizers.Graph
{
foreach (var node in posGraph.Nodes)
{
node.PropertyExpanded += new EventHandler<PositionedPropertyEventArgs>(node_Expanded);
node.PropertyCollapsed += new EventHandler<PositionedPropertyEventArgs>(node_Collapsed);
node.PropertyExpanded += new EventHandler<PositionedPropertyEventArgs>(node_PropertyExpanded);
node.PropertyCollapsed += new EventHandler<PositionedPropertyEventArgs>(node_PropertyCollapsed);
node.ContentNodeExpanded += new EventHandler<NestedNodeViewModelEventArgs>(node_ContentNodeExpanded);
node.ContentNodeCollapsed += new EventHandler<NestedNodeViewModelEventArgs>(node_ContentNodeCollapsed);
}
}
void node_ContentNodeExpanded(object sender, NestedNodeViewModelEventArgs e)
{
layoutGraph(this.objectGraph);
}
void node_ContentNodeCollapsed(object sender, NestedNodeViewModelEventArgs e)
{
layoutGraph(this.objectGraph);
}
void node_Expanded(object sender, PositionedPropertyEventArgs e)
void node_PropertyExpanded(object sender, PositionedPropertyEventArgs e)
{
// remember this property is expanded (for later graph rebuilds)
expandedNodes.SetExpanded(e.Property.Expression.Code);
@ -169,7 +182,7 @@ namespace Debugger.AddIn.Visualizers.Graph @@ -169,7 +182,7 @@ namespace Debugger.AddIn.Visualizers.Graph
layoutGraph(this.objectGraph);
}
void node_Collapsed(object sender, PositionedPropertyEventArgs e)
void node_PropertyCollapsed(object sender, PositionedPropertyEventArgs e)
{
// remember this property is collapsed (for later graph rebuilds)
expandedNodes.SetCollapsed(e.Property.Expression.Code);

Loading…
Cancel
Save