diff --git a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs index 38ee4c1666..8afce87fd6 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraph/ObjectGraphBuilder.cs @@ -242,7 +242,7 @@ namespace Debugger.AddIn.Visualizers.Graph propertyList.Add(new ObjectGraphProperty { Name = memberProp.Name, Expression = propExpression, Value = "", - PropInfo = memberProp, IsAtomic = true, TargetNode = null }); + MemberInfo = memberProp, IsAtomic = true, TargetNode = null }); } return propertyList.Sorted(ObjectPropertyComparer.Instance); diff --git a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphControl.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphControl.xaml.cs index 923554febc..2925bf01d9 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphControl.xaml.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphControl.xaml.cs @@ -27,19 +27,19 @@ namespace Debugger.AddIn.Visualizers.Graph /// public partial class ObjectGraphControl : UserControl { - private WindowsDebugger debuggerService; - private EnumViewModel layoutViewModel; - private ObjectGraph objectGraph; - private ObjectGraphBuilder objectGraphBuilder; + WindowsDebugger debuggerService; + EnumViewModel layoutViewModel; + ObjectGraph objectGraph; + ObjectGraphBuilder objectGraphBuilder; - private PositionedGraph oldPosGraph; - private PositionedGraph currentPosGraph; - private GraphDrawer graphDrawer; + PositionedGraph oldPosGraph; + PositionedGraph currentPosGraph; + GraphDrawer graphDrawer; static double mouseWheelZoomSpeed = 0.05; /// Long-lived map telling which graph nodes and content nodes the user expanded. - private Expanded expanded = new Expanded(); + static Expanded expanded = new Expanded(); public ObjectGraphControl() { @@ -136,7 +136,7 @@ namespace Debugger.AddIn.Visualizers.Graph { this.objectGraphBuilder = new ObjectGraphBuilder(debuggerService); Log.Debug("Debugger visualizer: Building graph for expression: " + txtExpression.Text); - return this.objectGraphBuilder.BuildGraphForExpression(expression, this.expanded.Expressions); + return this.objectGraphBuilder.BuildGraphForExpression(expression, expanded.Expressions); } void LayoutGraph(ObjectGraph graph) @@ -150,7 +150,7 @@ namespace Debugger.AddIn.Visualizers.Graph this.oldPosGraph = this.currentPosGraph; Log.Debug("Debugger visualizer: Calculating graph layout"); var layoutDirection = layoutViewModel.SelectedEnumValue; - this.currentPosGraph = new TreeLayout(layoutDirection).CalculateLayout(graph, this.expanded); + this.currentPosGraph = new TreeLayout(layoutDirection).CalculateLayout(graph, expanded); Log.Debug("Debugger visualizer: Graph layout done"); RegisterExpandCollapseEvents(this.currentPosGraph); diff --git a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphWindow.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphWindow.xaml.cs index 362aa066ca..9861f3bf34 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphWindow.xaml.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Visualizers/Graph/ObjectGraphWindow.xaml.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; @@ -13,7 +14,6 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; - using Debugger.AddIn.Visualizers.Graph.Layout; using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Services; @@ -27,73 +27,74 @@ namespace Debugger.AddIn.Visualizers.Graph { private WindowsDebugger debuggerService; - public ObjectGraphWindow() + private ObjectGraphWindow() { InitializeComponent(); debuggerService = DebuggerService.CurrentDebugger as WindowsDebugger; - if (debuggerService == null) - throw new ApplicationException("Only windows debugger is currently supported"); - - registerEvents(); - instance = this; + if (debuggerService == null) throw new DebuggerVisualizerException("Only windows debugger is currently supported"); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); - unregisterEvents(); + UnregisterDebuggerEvents(); this.objectGraphControl.ClearUIControlCache(); - instance = null; + ObjectGraphWindow.Instance = null; // allow release } public ICSharpCode.NRefactory.Ast.Expression ShownExpression { - get { - return this.objectGraphControl.ShownExpression; - } - set { - this.objectGraphControl.ShownExpression = value; - } + get { return this.objectGraphControl.ShownExpression; } + set { this.objectGraphControl.ShownExpression = value; } } - static ObjectGraphWindow instance; /// When Window is visible, returns reference to the Window. Otherwise returns null. - public static ObjectGraphWindow Instance - { - get { return instance; } - } + public static ObjectGraphWindow Instance { get; private set; } + /// + /// Shows the singleton instance of ObjectGraphWindow and also returns it. + /// + /// public static ObjectGraphWindow EnsureShown() { - var window = ObjectGraphWindow.Instance ?? new ObjectGraphWindow(); - window.Topmost = true; - window.Show(); - return window; + if (ObjectGraphWindow.Instance == null) { + ObjectGraphWindow.Instance = new ObjectGraphWindow(); + ObjectGraphWindow.Instance.Topmost = true; + } + ObjectGraphWindow.Instance.RegisterDebuggerEvents(); + ObjectGraphWindow.Instance.Show(); + return ObjectGraphWindow.Instance; } - private void registerEvents() + static bool isDebuggerEventsRegistered = false; + + void RegisterDebuggerEvents() { - debuggerService.IsProcessRunningChanged += new EventHandler(debuggerService_IsProcessRunningChanged); - debuggerService.DebugStopped += new EventHandler(debuggerService_DebugStopped); + if (!isDebuggerEventsRegistered) { + debuggerService.IsProcessRunningChanged += DebuggerService_IsProcessRunningChanged; + debuggerService.DebugStopped += DebuggerService_DebugStopped; + // cannot use debuggerService.IsProcessRunningChanged.GetInvocationList() from outside + isDebuggerEventsRegistered = true; + } } - private void unregisterEvents() + void UnregisterDebuggerEvents() { - debuggerService.IsProcessRunningChanged -= new EventHandler(debuggerService_IsProcessRunningChanged); - debuggerService.DebugStopped -= new EventHandler(debuggerService_DebugStopped); + debuggerService.IsProcessRunningChanged -= DebuggerService_IsProcessRunningChanged; + debuggerService.DebugStopped -= DebuggerService_DebugStopped; + isDebuggerEventsRegistered = false; } - public void debuggerService_IsProcessRunningChanged(object sender, EventArgs e) + void DebuggerService_IsProcessRunningChanged(object sender, EventArgs e) { // on step or breakpoint hit - if (!debuggerService.IsProcessRunning) - { + if (!debuggerService.IsProcessRunning) { this.objectGraphControl.Refresh(); } } - public void debuggerService_DebugStopped(object sender, EventArgs e) + void DebuggerService_DebugStopped(object sender, EventArgs e) { this.Close(); }