Browse Source

Added extra display options for Code Coverage Pad. Can now choose to show/hide the visit count list, optionally view the source code next to the coverage tree, or just display the tree on its own.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1168 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
e76aea7557
  1. 15
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
  2. 3
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
  3. 470
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs
  4. 26
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs
  5. 26
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs
  6. 20
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs
  7. 41
      src/AddIns/Misc/CodeCoverage/Project/Src/ShowDisplayOptionsDropDown.cs
  8. 29
      src/AddIns/Misc/CodeCoverage/Project/Src/ShowSourceCodeCommand.cs
  9. 29
      src/AddIns/Misc/CodeCoverage/Project/Src/ShowVisitCountCommand.cs

15
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin

@ -32,6 +32,21 @@
tooltip = "${res:ICSharpCode.CodeCoverage.ToggleCodeCoverage}" tooltip = "${res:ICSharpCode.CodeCoverage.ToggleCodeCoverage}"
type = "CheckBox" type = "CheckBox"
class = "ICSharpCode.CodeCoverage.ToggleCodeCoverageCommand"/> class = "ICSharpCode.CodeCoverage.ToggleCodeCoverageCommand"/>
<ToolbarItem id = "CodeCoveragePadDisplayOptionsSeparator" type = "Separator"/>
<ToolbarItem id = "CodeCoveragePadDisplayOptions"
type = "DropDownButton"
icon = "Icons.16x16.Options"
tooltip = "Display Options"
class = "ICSharpCode.CodeCoverage.ShowDisplayOptionsDropDown">
<MenuItem id = "ShowVisitCountOption"
type = "CheckBox"
label = "Show Visit Count"
class = "ICSharpCode.CodeCoverage.ShowVisitCountCommand"/>
<MenuItem id = "ShowSourceCodeOption"
type = "CheckBox"
label = "Show Source Code"
class = "ICSharpCode.CodeCoverage.ShowSourceCodeCommand"/>
</ToolbarItem>
</Path> </Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions"> <Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">

3
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj

@ -80,6 +80,9 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> <Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link> <Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Src\ShowVisitCountCommand.cs" />
<Compile Include="Src\ShowSourceCodeCommand.cs" />
<Compile Include="Src\ShowDisplayOptionsDropDown.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj"> <ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

470
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs

@ -6,6 +6,8 @@
// </file> // </file>
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.TextEditor;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
@ -16,69 +18,21 @@ namespace ICSharpCode.CodeCoverage
{ {
CodeCoverageTreeView treeView; CodeCoverageTreeView treeView;
ListView listView; ListView listView;
SplitContainer splitContainer; SplitContainer verticalSplitContainer;
SplitContainer horizontalSplitContainer;
TextEditorControl textEditorControl;
ColumnHeader visitCountColumnHeader; ColumnHeader visitCountColumnHeader;
ColumnHeader startLineColumnHeader; ColumnHeader startLineColumnHeader;
ColumnHeader endLineColumnHeader; ColumnHeader endLineColumnHeader;
ColumnHeader startColumnColumnHeader; ColumnHeader startColumnColumnHeader;
ColumnHeader endColumnColumnHeader; ColumnHeader endColumnColumnHeader;
ToolStrip toolStrip; ToolStrip toolStrip;
bool showSourceCodePanel;
bool showVisitCountPanel = true;
public CodeCoverageControl() public CodeCoverageControl()
{ {
// TreeView UpdateDisplay();
treeView = new CodeCoverageTreeView();
treeView.Dock = DockStyle.Fill;
treeView.ImageList = CodeCoverageImageList.ImageList;
treeView.AfterSelect += CodeCoverageTreeViewAfterSelect;
// ListView
listView = new ListView();
listView.View = View.Details;
listView.Dock = DockStyle.Fill;
listView.FullRowSelect = true;
listView.HideSelection = false;
listView.ItemActivate += ListViewItemActivate;
visitCountColumnHeader = new ColumnHeader();
visitCountColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.VisitCount}");
visitCountColumnHeader.Width = 80;
startLineColumnHeader = new ColumnHeader();
startLineColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.Line}");
startLineColumnHeader.Width = 80;
startColumnColumnHeader = new ColumnHeader();
startColumnColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.Column}");
startColumnColumnHeader.Width = 80;
endLineColumnHeader = new ColumnHeader();
endLineColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.EndLine}");
endLineColumnHeader.Width = 80;
endColumnColumnHeader = new ColumnHeader();
endColumnColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.EndColumn}");
endColumnColumnHeader.Width = 80;
listView.Columns.AddRange(new ColumnHeader[] {visitCountColumnHeader,
startLineColumnHeader,
startColumnColumnHeader,
endLineColumnHeader,
endColumnColumnHeader});
// SplitContainer.
splitContainer = new SplitContainer();
splitContainer.SplitterWidth = 2;
splitContainer.Dock = DockStyle.Fill;
splitContainer.Panel1.Controls.Add(treeView);
splitContainer.Panel2.Controls.Add(listView);
Controls.Add(splitContainer);
// Toolstrip
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/CodeCoveragePad/Toolbar");
toolStrip.GripStyle = ToolStripGripStyle.Hidden;
Controls.Add(toolStrip);
} }
public void UpdateToolbar() public void UpdateToolbar()
@ -95,12 +49,164 @@ namespace ICSharpCode.CodeCoverage
public void Clear() public void Clear()
{ {
treeView.Clear(); treeView.Clear();
listView.Items.Clear(); if (listView != null) {
listView.Items.Clear();
}
if (textEditorControl != null) {
textEditorControl.FileName = null;
textEditorControl.Text = String.Empty;
}
}
public bool ShowSourceCodePanel {
get {
return showSourceCodePanel;
}
set {
if (showSourceCodePanel != value) {
showSourceCodePanel = value;
OnShowSourceCodePanelChanged();
UpdateDisplay();
DisplaySelectedItem(treeView.SelectedNode as CodeCoverageTreeNode);
}
}
}
public bool ShowVisitCountPanel {
get {
return showVisitCountPanel;
}
set {
if (showVisitCountPanel != value) {
showVisitCountPanel = value;
OnShowVisitCountPanelChanged();
UpdateDisplay();
DisplaySelectedItem(treeView.SelectedNode as CodeCoverageTreeNode);
}
}
}
/// <summary>
/// Adds or removes the visit count list view or the source code
/// panel.
/// </summary>
void UpdateDisplay()
{
CreateTreeView();
if (showVisitCountPanel) {
CreateListView();
} else {
DisposeListView();
}
if (showSourceCodePanel) {
CreateTextEditor();
} else {
DisposeTextEditor();
}
if (showVisitCountPanel || showSourceCodePanel) {
CreateVerticalSplitContainer();
} else {
DisposeVerticalSplitContainer();
}
if (showSourceCodePanel && showVisitCountPanel) {
CreateHorizontalSplitContainer();
} else {
DisposeHorizontalSplitContainer();
}
// Add tree view.
if (showVisitCountPanel || showSourceCodePanel) {
if (Controls.Contains(treeView)) {
Controls.Remove(treeView);
}
if (!verticalSplitContainer.Panel1.Controls.Contains(treeView)) {
verticalSplitContainer.Panel1.Controls.Add(treeView);
}
} else {
if (!Controls.Contains(treeView)) {
Controls.Add(treeView);
}
}
// Add list view.
if (showVisitCountPanel) {
if (showSourceCodePanel) {
if (verticalSplitContainer.Panel2.Controls.Contains(listView)) {
verticalSplitContainer.Panel2.Controls.Remove(listView);
}
if (!horizontalSplitContainer.Panel1.Controls.Contains(listView)) {
horizontalSplitContainer.Panel1.Controls.Add(listView);
}
} else {
if (!verticalSplitContainer.Panel2.Controls.Contains(listView)) {
verticalSplitContainer.Panel2.Controls.Add(listView);
}
}
}
// Add text editor
if (showSourceCodePanel) {
if (showVisitCountPanel) {
if (verticalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
verticalSplitContainer.Panel2.Controls.Remove(textEditorControl);
}
if (!horizontalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
horizontalSplitContainer.Panel2.Controls.Add(textEditorControl);
}
} else {
if (!verticalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
verticalSplitContainer.Panel2.Controls.Add(textEditorControl);
}
}
}
// Add vertical split container.
if (showVisitCountPanel || showSourceCodePanel) {
if (!Controls.Contains(verticalSplitContainer)) {
Controls.Add(verticalSplitContainer);
}
}
// Add horizontal split container.
if (showVisitCountPanel && showSourceCodePanel) {
if (!verticalSplitContainer.Panel2.Controls.Contains(horizontalSplitContainer)) {
verticalSplitContainer.Panel2.Controls.Add(horizontalSplitContainer);
}
}
// Add toolstrip - need to re-add it last otherwise the
// other controls will be displayed underneath it.
if (toolStrip == null) {
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/CodeCoveragePad/Toolbar");
toolStrip.GripStyle = ToolStripGripStyle.Hidden;
}
if (Controls.Contains(toolStrip)) {
Controls.Remove(toolStrip);
}
Controls.Add(toolStrip);
} }
void CodeCoverageTreeViewAfterSelect(object sender, TreeViewEventArgs e) void CodeCoverageTreeViewAfterSelect(object sender, TreeViewEventArgs e)
{ {
UpdateListView((CodeCoverageTreeNode)e.Node); DisplaySelectedItem((CodeCoverageTreeNode)e.Node);
}
void DisplaySelectedItem(CodeCoverageTreeNode node)
{
if (node == null) {
return;
}
if (listView != null) {
UpdateListView(node);
}
if (textEditorControl != null) {
UpdateTextEditor(node);
}
} }
void UpdateListView(CodeCoverageTreeNode node) void UpdateListView(CodeCoverageTreeNode node)
@ -118,6 +224,24 @@ namespace ICSharpCode.CodeCoverage
} }
} }
void UpdateTextEditor(CodeCoverageTreeNode node)
{
CodeCoverageClassTreeNode classNode = node as CodeCoverageClassTreeNode;
CodeCoverageMethodTreeNode methodNode = node as CodeCoverageMethodTreeNode;
if (classNode != null && classNode.Nodes.Count > 0) {
methodNode = (CodeCoverageMethodTreeNode)classNode.Nodes[0];
}
if (methodNode != null && methodNode.Method.SequencePoints.Count > 0) {
CodeCoverageSequencePoint sequencePoint = methodNode.Method.SequencePoints[0];
if (classNode == null) {
OpenFile(sequencePoint.Document, sequencePoint.Line - 1, sequencePoint.Column - 1);
} else {
OpenFile(sequencePoint.Document, 1, 1);
}
}
}
void AddClass(CodeCoverageClassTreeNode node) void AddClass(CodeCoverageClassTreeNode node)
{ {
foreach (CodeCoverageMethodTreeNode method in node.Nodes) { foreach (CodeCoverageMethodTreeNode method in node.Nodes) {
@ -153,5 +277,239 @@ namespace ICSharpCode.CodeCoverage
} }
} }
} }
void OpenFile(string fileName, int line, int column)
{
if (fileName != textEditorControl.FileName) {
textEditorControl.LoadFile(fileName, true, true);
}
textEditorControl.ActiveTextAreaControl.ScrollTo(int.MaxValue);
textEditorControl.ActiveTextAreaControl.Caret.Line = line - 1;
textEditorControl.ActiveTextAreaControl.ScrollToCaret();
CodeCoverageService.ShowCodeCoverage(textEditorControl, fileName);
}
void CreateTreeView()
{
if (treeView != null) {
return;
}
treeView = new CodeCoverageTreeView();
treeView.Dock = DockStyle.Fill;
treeView.ImageList = CodeCoverageImageList.ImageList;
treeView.AfterSelect += CodeCoverageTreeViewAfterSelect;
if (CodeCoverageService.Results != null) {
AddModules(CodeCoverageService.Results.Modules);
}
}
void DisposeTreeView()
{
if (treeView == null) {
return;
}
treeView.AfterSelect -= CodeCoverageTreeViewAfterSelect;
if (Controls.Contains(treeView)) {
Controls.Remove(treeView);
}
if (verticalSplitContainer != null && verticalSplitContainer.Panel1.Controls.Contains(treeView)) {
verticalSplitContainer.Panel1.Controls.Remove(treeView);
}
treeView.Dispose();
treeView = null;
}
void CreateListView()
{
if (listView != null) {
return;
}
listView = new ListView();
listView.View = View.Details;
listView.Dock = DockStyle.Fill;
listView.FullRowSelect = true;
listView.HideSelection = false;
listView.ItemActivate += ListViewItemActivate;
visitCountColumnHeader = new ColumnHeader();
visitCountColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.VisitCount}");
visitCountColumnHeader.Width = 80;
startLineColumnHeader = new ColumnHeader();
startLineColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.Line}");
startLineColumnHeader.Width = 80;
startColumnColumnHeader = new ColumnHeader();
startColumnColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.Column}");
startColumnColumnHeader.Width = 80;
endLineColumnHeader = new ColumnHeader();
endLineColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.EndLine}");
endLineColumnHeader.Width = 80;
endColumnColumnHeader = new ColumnHeader();
endColumnColumnHeader.Text = StringParser.Parse("${res:ICSharpCode.CodeCoverage.EndColumn}");
endColumnColumnHeader.Width = 80;
listView.Columns.AddRange(new ColumnHeader[] {visitCountColumnHeader,
startLineColumnHeader,
startColumnColumnHeader,
endLineColumnHeader,
endColumnColumnHeader});
}
void DisposeListView()
{
if (listView == null) {
return;
}
if (verticalSplitContainer.Panel2.Controls.Contains(listView)) {
verticalSplitContainer.Panel2.Controls.Remove(listView);
}
if (horizontalSplitContainer != null && horizontalSplitContainer.Panel1.Controls.Contains(listView)) {
horizontalSplitContainer.Panel1.Controls.Remove(listView);
}
listView.ItemActivate -= ListViewItemActivate;
listView.Dispose();
listView = null;
}
void CreateVerticalSplitContainer()
{
if (verticalSplitContainer != null) {
return;
}
verticalSplitContainer = new SplitContainer();
verticalSplitContainer.SplitterWidth = 2;
verticalSplitContainer.Dock = DockStyle.Fill;
}
void DisposeVerticalSplitContainer()
{
if (verticalSplitContainer == null) {
return;
}
if (horizontalSplitContainer != null && verticalSplitContainer.Panel2.Controls.Contains(horizontalSplitContainer)) {
verticalSplitContainer.Panel2.Controls.Remove(horizontalSplitContainer);
}
if (listView != null && verticalSplitContainer.Panel2.Controls.Contains(listView)) {
verticalSplitContainer.Panel2.Controls.Remove(listView);
}
if (treeView != null && verticalSplitContainer.Panel1.Controls.Contains(treeView)) {
verticalSplitContainer.Panel1.Controls.Remove(treeView);
}
verticalSplitContainer.Dispose();
verticalSplitContainer = null;
}
void CreateHorizontalSplitContainer()
{
if (horizontalSplitContainer != null) {
return;
}
horizontalSplitContainer = new SplitContainer();
horizontalSplitContainer.SplitterWidth = 2;
horizontalSplitContainer.Orientation = Orientation.Horizontal;
horizontalSplitContainer.Dock = DockStyle.Fill;
}
void DisposeHorizontalSplitContainer()
{
if (horizontalSplitContainer == null) {
return;
}
if (listView != null && horizontalSplitContainer.Panel1.Controls.Contains(listView)) {
horizontalSplitContainer.Panel1.Controls.Remove(listView);
}
if (textEditorControl != null && horizontalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
horizontalSplitContainer.Panel2.Controls.Remove(textEditorControl);
}
if (verticalSplitContainer != null && verticalSplitContainer.Panel2.Controls.Contains(horizontalSplitContainer)) {
verticalSplitContainer.Panel2.Controls.Remove(horizontalSplitContainer);
}
horizontalSplitContainer.Dispose();
horizontalSplitContainer = null;
}
void CreateTextEditor()
{
if (textEditorControl != null) {
return;
}
textEditorControl = new TextEditorControl();
textEditorControl.Dock = DockStyle.Fill;
textEditorControl.Document.ReadOnly = true;
textEditorControl.TextEditorProperties = new SharpDevelopTextEditorProperties();
textEditorControl.ActiveTextAreaControl.TextArea.DoubleClick += TextEditorControlDoubleClick;
}
void DisposeTextEditor()
{
if (textEditorControl == null) {
return;
}
if (verticalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
verticalSplitContainer.Panel2.Controls.Remove(textEditorControl);
}
if (horizontalSplitContainer != null && horizontalSplitContainer.Panel2.Controls.Contains(textEditorControl)) {
horizontalSplitContainer.Panel2.Controls.Remove(textEditorControl);
}
textEditorControl.ActiveTextAreaControl.TextArea.DoubleClick -= TextEditorControlDoubleClick;
textEditorControl.Dispose();
textEditorControl = null;
}
void TextEditorControlDoubleClick(object sender, EventArgs e)
{
string fileName = textEditorControl.FileName;
if (fileName != null) {
Caret caret = textEditorControl.ActiveTextAreaControl.Caret;
FileService.JumpToFilePosition(fileName, caret.Line, caret.Column);
}
}
/// <summary>
/// If the treeview is to be moved to a different parent then
/// it needs to be recreated otherwise the OnBeforeExpand method
/// is never called.
/// </summary>
void OnShowVisitCountPanelChanged()
{
if ((showVisitCountPanel && !showSourceCodePanel) ||
(!showVisitCountPanel && !showSourceCodePanel)) {
// Tree view will be moved to a different parent.
DisposeTreeView();
}
}
void OnShowSourceCodePanelChanged()
{
if ((showSourceCodePanel && !showVisitCountPanel) ||
(!showSourceCodePanel && !showVisitCountPanel)) {
// Tree view will be moved to a different parent.
DisposeTreeView();
}
}
} }
} }

26
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs

@ -22,6 +22,8 @@ namespace ICSharpCode.CodeCoverage
public static readonly string NotVisitedForeColorProperty = "NotVisitedForeColor"; public static readonly string NotVisitedForeColorProperty = "NotVisitedForeColor";
public static readonly string NCoverFileNameProperty = "NCoverFileName"; public static readonly string NCoverFileNameProperty = "NCoverFileName";
public static readonly string CodeCoverageHighlightedProperty = "CodeCoverageHighlighted"; public static readonly string CodeCoverageHighlightedProperty = "CodeCoverageHighlighted";
public static readonly string ShowSourceCodePanelProperty = "ShowSourceCodePanel";
public static readonly string ShowVisitCountPanelProperty = "ShowVisitCountPanel";
#endregion #endregion
static Properties properties; static Properties properties;
@ -61,6 +63,30 @@ namespace ICSharpCode.CodeCoverage
} }
} }
/// <summary>
/// Shows/hides the source code panel in the code coverage pad.
/// </summary>
public static bool ShowSourceCodePanel {
get {
return Properties.Get<bool>(ShowSourceCodePanelProperty, false);
}
set {
Properties.Set<bool>(ShowSourceCodePanelProperty, value);
}
}
/// <summary>
/// Shows/hides the visit count panel in the code coverage pad.
/// </summary>
public static bool ShowVisitCountPanel {
get {
return Properties.Get<bool>(ShowVisitCountPanelProperty, true);
}
set {
Properties.Set<bool>(ShowVisitCountPanelProperty, value);
}
}
/// <summary> /// <summary>
/// Gets the colour that will be used when highlighting visited code. /// Gets the colour that will be used when highlighting visited code.
/// </summary> /// </summary>

26
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs

@ -7,6 +7,7 @@
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
@ -24,13 +25,13 @@ namespace ICSharpCode.CodeCoverage
instance = this; instance = this;
codeCoverageControl = new CodeCoverageControl(); codeCoverageControl = new CodeCoverageControl();
if (CodeCoverageService.Results != null) {
codeCoverageControl.AddModules(CodeCoverageService.Results.Modules);
}
codeCoverageControl.UpdateToolbar(); codeCoverageControl.UpdateToolbar();
ProjectService.SolutionClosed += SolutionClosed; ProjectService.SolutionClosed += SolutionClosed;
ProjectService.SolutionLoaded += SolutionLoaded; ProjectService.SolutionLoaded += SolutionLoaded;
ShowSourceCodePanel = CodeCoverageOptions.ShowSourceCodePanel;
ShowVisitCountPanel = CodeCoverageOptions.ShowVisitCountPanel;
} }
public static CodeCoveragePad Instance { public static CodeCoveragePad Instance {
@ -76,6 +77,24 @@ namespace ICSharpCode.CodeCoverage
codeCoverageControl.Clear(); codeCoverageControl.Clear();
} }
public bool ShowSourceCodePanel {
get {
return codeCoverageControl.ShowSourceCodePanel;
}
set {
codeCoverageControl.ShowSourceCodePanel = value;
}
}
public bool ShowVisitCountPanel {
get {
return codeCoverageControl.ShowVisitCountPanel;
}
set {
codeCoverageControl.ShowVisitCountPanel = value;
}
}
void SolutionLoaded(object sender, EventArgs e) void SolutionLoaded(object sender, EventArgs e)
{ {
codeCoverageControl.UpdateToolbar(); codeCoverageControl.UpdateToolbar();
@ -83,6 +102,7 @@ namespace ICSharpCode.CodeCoverage
void SolutionClosed(object sender, EventArgs e) void SolutionClosed(object sender, EventArgs e)
{ {
ClearCodeCoverageResults();
codeCoverageControl.UpdateToolbar(); codeCoverageControl.UpdateToolbar();
} }
} }

20
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs

@ -9,6 +9,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextEditor;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -103,6 +104,15 @@ namespace ICSharpCode.CodeCoverage
} }
} }
public static void ShowCodeCoverage(TextEditorControl textEditor, string fileName)
{
List<CodeCoverageSequencePoint> sequencePoints = results.GetSequencePoints(fileName);
if (sequencePoints.Count > 0) {
codeCoverageHighlighter.AddMarkers(textEditor.Document.MarkerStrategy, sequencePoints);
textEditor.Refresh();
}
}
static void ShowCodeCoverage() static void ShowCodeCoverage()
{ {
// Highlight any open files. // Highlight any open files.
@ -131,13 +141,9 @@ namespace ICSharpCode.CodeCoverage
static void ShowCodeCoverage(IViewContent view) static void ShowCodeCoverage(IViewContent view)
{ {
TextEditorDisplayBindingWrapper textEditor = view as TextEditorDisplayBindingWrapper; TextEditorDisplayBindingWrapper displayBindingWrapper = view as TextEditorDisplayBindingWrapper;
if (textEditor != null && view.FileName != null) { if (displayBindingWrapper != null && displayBindingWrapper.TextEditorControl != null && view.FileName != null) {
List<CodeCoverageSequencePoint> sequencePoints = results.GetSequencePoints(view.FileName); ShowCodeCoverage(displayBindingWrapper.TextEditorControl, view.FileName);
if (sequencePoints.Count > 0) {
codeCoverageHighlighter.AddMarkers(textEditor.textAreaControl.Document.MarkerStrategy, sequencePoints);
textEditor.textAreaControl.Refresh();
}
} }
} }

41
src/AddIns/Misc/CodeCoverage/Project/Src/ShowDisplayOptionsDropDown.cs

@ -0,0 +1,41 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using System;
using System.Windows.Forms;
namespace ICSharpCode.CodeCoverage
{
public class ShowDisplayOptionsDropDown : AbstractMenuCommand
{
ToolBarDropDownButton dropDownButton;
public override void Run()
{
}
protected override void OnOwnerChanged(EventArgs e)
{
base.OnOwnerChanged(e);
dropDownButton = (ToolBarDropDownButton)Owner;
GenerateDropDownItems();
}
void GenerateDropDownItems()
{
ToolStripItem[] items = (ToolStripItem[])(AddInTree.GetTreeNode("/SharpDevelop/Pads/CodeCoveragePad/Toolbar/CodeCoveragePadDisplayOptions").BuildChildItems(this)).ToArray(typeof(ToolStripItem));
foreach (ToolStripItem item in items) {
if (item is IStatusUpdate) {
((IStatusUpdate)item).UpdateStatus();
}
}
dropDownButton.DropDownItems.AddRange(items);
}
}
}

29
src/AddIns/Misc/CodeCoverage/Project/Src/ShowSourceCodeCommand.cs

@ -0,0 +1,29 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using System;
namespace ICSharpCode.CodeCoverage
{
public class ShowSourceCodeCommand : AbstractCheckableMenuCommand
{
public override bool IsChecked {
get {
return CodeCoverageOptions.ShowSourceCodePanel;
}
set {
CodeCoverageOptions.ShowSourceCodePanel = value;
CodeCoveragePad pad = CodeCoveragePad.Instance;
if (pad != null) {
pad.ShowSourceCodePanel = value;
}
}
}
}
}

29
src/AddIns/Misc/CodeCoverage/Project/Src/ShowVisitCountCommand.cs

@ -0,0 +1,29 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using System;
namespace ICSharpCode.CodeCoverage
{
public class ShowVisitCountCommand : AbstractCheckableMenuCommand
{
public override bool IsChecked {
get {
return CodeCoverageOptions.ShowVisitCountPanel;
}
set {
CodeCoverageOptions.ShowVisitCountPanel = value;
CodeCoveragePad pad = CodeCoveragePad.Instance;
if (pad != null) {
pad.ShowVisitCountPanel = value;
}
}
}
}
}
Loading…
Cancel
Save