Browse Source

Refactoring debugger pads - all pads are based at DebuggerPad

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1254 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
25af9021c2
  1. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 100
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs
  3. 123
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  4. 60
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/DebuggerPad.cs
  5. 44
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
  6. 43
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
  7. 47
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
  8. 76
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.Menu.cs
  9. 119
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

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

@ -59,6 +59,9 @@ @@ -59,6 +59,9 @@
<Compile Include="Src\Service\SetCurrentStatementCommand.cs" />
<Compile Include="Src\Pads\TreeListViewDebuggerItem.cs" />
<Compile Include="Src\Service\DebuggerIcons.cs" />
<Compile Include="Src\Pads\DebuggerPad.cs" />
<Compile Include="Src\Pads\CallStackPad.Menu.cs" />
<Compile Include="Src\Pads\RunningThreadsPad.Menu.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

100
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs

@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1253 $</version>
// </file>
using System;
using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public partial class CallStackPad
{
public bool ShowArgumentNames {
get {
return debugger.Properties.Get("ShowArgumentNames", true);
}
set {
debugger.Properties.Set("ShowArgumentNames", value);
}
}
public bool ShowArgumentValues {
get {
return debugger.Properties.Get("ShowArgumentValues", true);
}
set {
debugger.Properties.Set("ShowArgumentValues", value);
}
}
public bool ShowExternalMethods {
get {
return debugger.Properties.Get("ShowExternalMethods", false);
}
set {
debugger.Properties.Set("ShowExternalMethods", value);
}
}
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem argNamesItem;
argNamesItem = new ToolStripMenuItem();
argNamesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentNames");
argNamesItem.Checked = ShowArgumentNames;
argNamesItem.Click += delegate {
ShowArgumentNames = !ShowArgumentNames;
RefreshPad();
};
ToolStripMenuItem argValuesItem;
argValuesItem = new ToolStripMenuItem();
argValuesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentValues");
argValuesItem.Checked = ShowArgumentValues;
argValuesItem.Click += delegate {
ShowArgumentValues = !ShowArgumentValues;
RefreshPad();
};
ToolStripMenuItem extMethodsItem;
extMethodsItem = new ToolStripMenuItem();
extMethodsItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowExternalMethods");
extMethodsItem.Checked = ShowExternalMethods;
extMethodsItem.Click += delegate {
ShowExternalMethods = !ShowExternalMethods;
RefreshPad();
};
menu.Items.AddRange(new ToolStripItem[] {
argNamesItem,
argValuesItem,
extMethodsItem
});
e.Cancel = false;
}
}
}

123
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs

@ -20,11 +20,8 @@ using Debugger; @@ -20,11 +20,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class CallStackPad : AbstractPadContent
public partial class CallStackPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView callStackList;
ColumnHeader name = new ColumnHeader();
@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public CallStackPad()// : base("${res:MainWindow.Windows.Debug.CallStack}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
callStackList = new ListView();
callStackList.FullRowSelect = true;
callStackList.AutoArrange = true;
@ -60,24 +50,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -60,24 +50,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
language.Width = 50;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.DebuggingResumed += DebuggingResumed;
RefreshList();
}
public override void RedrawContent()
@ -86,82 +58,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -86,82 +58,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
language.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.Language");
}
public bool ShowArgumentNames {
get {
return debugger.Properties.Get("ShowArgumentNames", true);
}
set {
debugger.Properties.Set("ShowArgumentNames", value);
}
}
public bool ShowArgumentValues {
get {
return debugger.Properties.Get("ShowArgumentValues", true);
}
set {
debugger.Properties.Set("ShowArgumentValues", value);
}
}
public bool ShowExternalMethods {
get {
return debugger.Properties.Get("ShowExternalMethods", false);
}
set {
debugger.Properties.Set("ShowExternalMethods", value);
}
}
ContextMenuStrip CreateContextMenuStrip()
protected override void RegisterDebuggerEvents()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem argNamesItem;
argNamesItem = new ToolStripMenuItem();
argNamesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentNames");
argNamesItem.Checked = ShowArgumentNames;
argNamesItem.Click +=
delegate {
ShowArgumentNames = !ShowArgumentNames;
RefreshList();
};
ToolStripMenuItem argValuesItem;
argValuesItem = new ToolStripMenuItem();
argValuesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentValues");
argValuesItem.Checked = ShowArgumentValues;
argValuesItem.Click +=
delegate {
ShowArgumentValues = !ShowArgumentValues;
RefreshList();
};
ToolStripMenuItem extMethodsItem;
extMethodsItem = new ToolStripMenuItem();
extMethodsItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowExternalMethods");
extMethodsItem.Checked = ShowExternalMethods;
extMethodsItem.Click +=
delegate {
ShowExternalMethods = !ShowExternalMethods;
RefreshList();
};
menu.Items.AddRange(new ToolStripItem[] {
argNamesItem,
argValuesItem,
extMethodsItem
});
e.Cancel = false;
debuggerCore.DebuggeeStateChanged += delegate { RefreshPad(); };
debuggerCore.DebuggingResumed += delegate { RefreshPad(); };
}
void CallStackListItemActivate(object sender, EventArgs e)
@ -179,18 +80,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -179,18 +80,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
MessageBox.Show("You can not switch functions while the debugger is running.", "Function switch");
}
}
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}
void DebuggingResumed(object sender, DebuggerEventArgs e)
{
RefreshList();
}
public void RefreshList()
public override void RefreshPad()
{
bool showArgumentNames = ShowArgumentNames;
bool showArgumentValues = ShowArgumentValues;

60
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/DebuggerPad.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1064 $</version>
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public abstract class DebuggerPad: AbstractPadContent
{
protected WindowsDebugger debugger;
protected NDebugger debuggerCore;
public DebuggerPad()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
InitializeComponents();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
protected virtual void InitializeComponents()
{
}
void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
RegisterDebuggerEvents();
RefreshPad();
}
protected virtual void RegisterDebuggerEvents()
{
}
public virtual void RefreshPad()
{
}
}
}

44
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs

@ -19,11 +19,8 @@ using Debugger; @@ -19,11 +19,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class ExceptionHistoryPad : AbstractPadContent
public class ExceptionHistoryPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView exceptionHistoryList;
ColumnHeader time = new ColumnHeader();
@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public ExceptionHistoryPad()
protected override void InitializeComponents()
{
InitializeComponents();
}
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
exceptionHistoryList = new ListView();
exceptionHistoryList.FullRowSelect = true;
exceptionHistoryList.AutoArrange = true;
@ -60,25 +50,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -60,25 +50,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
time.Width = 80;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debugger.ExceptionHistoryModified += new EventHandler(ExceptionHistoryModified);
RefreshList();
}
public override void RedrawContent()
{
time.Text = ResourceService.GetString("MainWindow.Windows.Debug.ExceptionHistory.Time");
@ -86,6 +59,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -86,6 +59,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
location.Text = ResourceService.GetString("AddIns.HtmlHelp2.Location");
}
protected override void RegisterDebuggerEvents()
{
debugger.ExceptionHistoryModified += delegate { RefreshPad(); };
}
void ExceptionHistoryListItemActivate(object sender, EventArgs e)
{
SourcecodeSegment nextStatement = ((Debugger.Exception)(exceptionHistoryList.SelectedItems[0].Tag)).Location;
@ -115,13 +94,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -115,13 +94,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}*/
}
}
void ExceptionHistoryModified(object sender, EventArgs e)
{
RefreshList();
}
public void RefreshList()
public override void RefreshPad()
{
exceptionHistoryList.BeginUpdate();
exceptionHistoryList.Items.Clear();

43
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs

@ -19,11 +19,8 @@ using Debugger; @@ -19,11 +19,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class LoadedModulesPad : AbstractPadContent
public class LoadedModulesPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView loadedModulesList;
ColumnHeader name = new ColumnHeader();
@ -41,16 +38,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -41,16 +38,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return loadedModulesList;
}
}
public LoadedModulesPad() //: base("${res:MainWindow.Windows.Debug.Modules}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
loadedModulesList = new ListView();
loadedModulesList.FullRowSelect = true;
loadedModulesList.AutoArrange = true;
@ -70,24 +60,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -70,24 +60,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
information.Width = 130;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.ModuleLoaded += new EventHandler<ModuleEventArgs>(AddModule);
debuggerCore.ModuleUnloaded += new EventHandler<ModuleEventArgs>(RemoveModule);
RefreshList();
}
public override void RedrawContent()
@ -101,8 +73,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -101,8 +73,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
timestamp.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.TimestampColumn}");
information.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.InformationColumn}");
}
protected override void RegisterDebuggerEvents()
{
debuggerCore.ModuleLoaded += AddModule;
debuggerCore.ModuleUnloaded += RemoveModule;
}
void RefreshList()
public override void RefreshPad()
{
loadedModulesList.Items.Clear();
foreach(Module m in debuggerCore.Modules) {

47
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs

@ -20,11 +20,8 @@ using System.Collections.Generic; @@ -20,11 +20,8 @@ using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class LocalVarPad : AbstractPadContent
public class LocalVarPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
TreeListView localVarList;
ColumnHeader name = new ColumnHeader();
@ -37,15 +34,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -37,15 +34,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public LocalVarPad() //: base("${res:MainWindow.Windows.Debug.Local}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
//iconsService = (ClassBrowserIconsService)ServiceManager.Services.GetService(typeof(ClassBrowserIconsService));
localVarList = new TreeListView();
localVarList.SmallImageList = DebuggerIcons.ImageList;
@ -65,14 +55,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -65,14 +55,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
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");
}
// This is a walkarond for a visual issue
@ -81,13 +70,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -81,13 +70,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.Visible = true;
}
public void InitializeDebugger()
protected override void RegisterDebuggerEvents()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += delegate { debuggerCore.LocalVariables.Update(); };
}
public override void RefreshPad()
{
localVarList.BeginUpdate();
localVarList.Items.Clear();
AddVariableCollectionToTree(debuggerCore.LocalVariables, localVarList.Items);
localVarList.EndUpdate();
}
@ -109,13 +101,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -109,13 +101,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
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)
{

76
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.Menu.cs

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1253 $</version>
// </file>
using System;
using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public partial class RunningThreadsPad
{
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ListView.SelectedListViewItemCollection items = runningThreadsList.SelectedItems;
if (items.Count == 0) {
e.Cancel = true;
return;
}
ListViewItem item = items[0];
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem freezeItem;
freezeItem = new ToolStripMenuItem();
freezeItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Freeze");
freezeItem.Checked = (item.Tag as Thread).Suspended;
freezeItem.Click +=
delegate {
ListView.SelectedListViewItemCollection selItems = runningThreadsList.SelectedItems;
if (selItems.Count == 0) {
return;
}
bool suspended = (selItems[0].Tag as Thread).Suspended;
if (!debuggerCore.IsPaused) {
MessageBox.Show("You can not freeze or thaw thread while the debugger is running.", "Thread freeze");
return;
}
foreach(ListViewItem i in selItems) {
(i.Tag as Thread).Suspended = !suspended;
}
RefreshPad();
};
menu.Items.AddRange(new ToolStripItem[] {
freezeItem,
});
e.Cancel = false;
}
}
}

119
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

@ -20,11 +20,8 @@ using Debugger; @@ -20,11 +20,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class RunningThreadsPad : AbstractPadContent
public partial class RunningThreadsPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView runningThreadsList;
ColumnHeader id = new ColumnHeader();
@ -38,16 +35,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -38,16 +35,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return runningThreadsList;
}
}
public RunningThreadsPad() //: base("${res:MainWindow.Windows.Debug.Threads}", null)
{
InitializeComponents();
}
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
protected override void InitializeComponents()
{
runningThreadsList = new ListView();
runningThreadsList.FullRowSelect = true;
runningThreadsList.AutoArrange = true;
@ -66,26 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -66,26 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Width = 80;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.ThreadStarted += ThreadStarted;
debuggerCore.ThreadStateChanged += ThreadStateChanged;
debuggerCore.ThreadExited += ThreadExited;
RefreshList();
}
public override void RedrawContent()
@ -97,58 +67,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -97,58 +67,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Frozen");
}
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
protected override void RegisterDebuggerEvents()
{
ListView.SelectedListViewItemCollection items = runningThreadsList.SelectedItems;
if (items.Count == 0) {
e.Cancel = true;
return;
}
ListViewItem item = items[0];
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem freezeItem;
freezeItem = new ToolStripMenuItem();
freezeItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Freeze");
freezeItem.Checked = (item.Tag as Thread).Suspended;
freezeItem.Click +=
delegate {
ListView.SelectedListViewItemCollection selItems = runningThreadsList.SelectedItems;
if (selItems.Count == 0) {
return;
}
bool suspended = (selItems[0].Tag as Thread).Suspended;
if (!debuggerCore.IsPaused) {
MessageBox.Show("You can not freeze or thaw thread while the debugger is running.", "Thread freeze");
return;
}
foreach(ListViewItem i in selItems) {
(i.Tag as Thread).Suspended = !suspended;
}
RefreshList();
debuggerCore.DebuggeeStateChanged += delegate { RefreshPad(); };
debuggerCore.ThreadStarted += delegate(object sender, ThreadEventArgs e) {
AddThread(e.Thread);
};
debuggerCore.ThreadStateChanged += delegate(object sender, ThreadEventArgs e) {
RefreshThread(e.Thread);
};
debuggerCore.ThreadExited += delegate(object sender, ThreadEventArgs e) {
RemoveThread(e.Thread);
};
menu.Items.AddRange(new ToolStripItem[] {
freezeItem,
});
e.Cancel = false;
}
void RefreshList()
public override void RefreshPad()
{
foreach (Thread t in debuggerCore.Threads) {
RefreshThread(t);
@ -164,28 +98,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -164,28 +98,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
} else {
MessageBox.Show("You can not switch threads while the debugger is running.", "Thread switch");
}
}
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}
void ThreadStarted(object sender, ThreadEventArgs e)
{
AddThread(e.Thread);
}
void ThreadStateChanged(object sender, ThreadEventArgs e)
{
RefreshThread(e.Thread);
}
void ThreadExited(object sender, ThreadEventArgs e)
{
RemoveThread(e.Thread);
}
}
void AddThread(Thread thread)
{

Loading…
Cancel
Save