#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

130 lines
3.7 KiB

// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class LocalVarPad : AbstractPadContent
{
WindowsDebugger debugger;
NDebugger debuggerCore;
TreeListView localVarList;
ColumnHeader name = new ColumnHeader();
ColumnHeader val = new ColumnHeader();
ColumnHeader type = new ColumnHeader();
public override Control Control {
get {
return localVarList;
}
}
public LocalVarPad() //: base("${res:MainWindow.Windows.Debug.Local}", null)
{
InitializeComponents();
}
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
//iconsService = (ClassBrowserIconsService)ServiceManager.Services.GetService(typeof(ClassBrowserIconsService));
localVarList = new TreeListView();
localVarList.SmallImageList = DebuggerIcons.ImageList;
localVarList.ShowPlusMinus = true;
localVarList.FullRowSelect = true;
localVarList.Dock = DockStyle.Fill;
localVarList.Sorting = SortOrder.Ascending;
//localVarList.GridLines = false;
//localVarList.Activation = ItemActivation.OneClick;
localVarList.Columns.AddRange(new ColumnHeader[] {name, val, type} );
name.Width = 250;
val.Width = 300;
type.Width = 250;
localVarList.Visible = false;
localVarList.SizeChanged += new EventHandler(localVarList_SizeChanged);
localVarList.BeforeExpand += new TreeListViewCancelEventHandler(localVarList_BeforeExpand);
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
// This is a walkarond for a visual issue
void localVarList_SizeChanged(object sender, EventArgs e)
{
localVarList.Visible = true;
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += delegate { debuggerCore.LocalVariables.Update(); };
localVarList.BeginUpdate();
AddVariableCollectionToTree(debuggerCore.LocalVariables, localVarList.Items);
localVarList.EndUpdate();
}
public static void AddVariableCollectionToTree(VariableCollection varCollection, TreeListViewItemCollection tree)
{
varCollection.VariableAdded += delegate(object sender, VariableEventArgs e) {
AddVariableToTree(e.Variable, tree);
};
foreach(Variable variable in varCollection) {
AddVariableToTree(variable, tree);
}
}
public static void AddVariableToTree(Variable variableToAdd, TreeListViewItemCollection tree)
{
TreeListViewDebuggerItem newItem = new TreeListViewDebuggerItem(variableToAdd);
tree.Add(newItem);
}
public override void RedrawContent()
{
name.Text = ResourceService.GetString("Global.Name");
val.Text = ResourceService.GetString("Dialog.HighlightingEditor.Properties.Value");
type.Text = ResourceService.GetString("ResourceEditor.ResourceEdit.TypeColumn");
}
private void localVarList_BeforeExpand(object sender, TreeListViewCancelEventArgs e)
{
if (debuggerCore.IsPaused) {
((TreeListViewDebuggerItem)e.Item).BeforeExpand();
} else {
MessageBox.Show("You can not explore variables while the debuggee is running.");
e.Cancel = true;
}
}
}
}