diff --git a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
index 3f2597112e..9c846862ac 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
+++ b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
@@ -32,6 +32,21 @@
tooltip = "${res:ICSharpCode.CodeCoverage.ToggleCodeCoverage}"
type = "CheckBox"
class = "ICSharpCode.CodeCoverage.ToggleCodeCoverageCommand"/>
+
+
+
+
+
diff --git a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
index 05a0257d58..2137ab03c8 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
+++ b/src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
@@ -80,6 +80,9 @@
Configuration\GlobalAssemblyInfo.cs
+
+
+
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs
index cd3218d683..bff6102d0e 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageControl.cs
@@ -6,6 +6,8 @@
//
using ICSharpCode.Core;
+using ICSharpCode.TextEditor;
+using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
@@ -16,69 +18,21 @@ namespace ICSharpCode.CodeCoverage
{
CodeCoverageTreeView treeView;
ListView listView;
- SplitContainer splitContainer;
+ SplitContainer verticalSplitContainer;
+ SplitContainer horizontalSplitContainer;
+ TextEditorControl textEditorControl;
ColumnHeader visitCountColumnHeader;
ColumnHeader startLineColumnHeader;
ColumnHeader endLineColumnHeader;
ColumnHeader startColumnColumnHeader;
ColumnHeader endColumnColumnHeader;
ToolStrip toolStrip;
+ bool showSourceCodePanel;
+ bool showVisitCountPanel = true;
public CodeCoverageControl()
{
- // TreeView
- 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);
+ UpdateDisplay();
}
public void UpdateToolbar()
@@ -95,12 +49,164 @@ namespace ICSharpCode.CodeCoverage
public void 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);
+ }
+ }
+ }
+
+ ///
+ /// Adds or removes the visit count list view or the source code
+ /// panel.
+ ///
+ 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)
{
- 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)
@@ -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)
{
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);
+ }
+ }
+
+ ///
+ /// If the treeview is to be moved to a different parent then
+ /// it needs to be recreated otherwise the OnBeforeExpand method
+ /// is never called.
+ ///
+ 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();
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs
index 256812c817..84f12ec5b7 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs
+++ b/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 NCoverFileNameProperty = "NCoverFileName";
public static readonly string CodeCoverageHighlightedProperty = "CodeCoverageHighlighted";
+ public static readonly string ShowSourceCodePanelProperty = "ShowSourceCodePanel";
+ public static readonly string ShowVisitCountPanelProperty = "ShowVisitCountPanel";
#endregion
static Properties properties;
@@ -60,6 +62,30 @@ namespace ICSharpCode.CodeCoverage
Properties.Set(CodeCoverageHighlightedProperty, value);
}
}
+
+ ///
+ /// Shows/hides the source code panel in the code coverage pad.
+ ///
+ public static bool ShowSourceCodePanel {
+ get {
+ return Properties.Get(ShowSourceCodePanelProperty, false);
+ }
+ set {
+ Properties.Set(ShowSourceCodePanelProperty, value);
+ }
+ }
+
+ ///
+ /// Shows/hides the visit count panel in the code coverage pad.
+ ///
+ public static bool ShowVisitCountPanel {
+ get {
+ return Properties.Get(ShowVisitCountPanelProperty, true);
+ }
+ set {
+ Properties.Set(ShowVisitCountPanelProperty, value);
+ }
+ }
///
/// Gets the colour that will be used when highlighting visited code.
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs
index 81390de988..334d0b651e 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs
@@ -7,6 +7,7 @@
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.TextEditor;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
@@ -24,13 +25,13 @@ namespace ICSharpCode.CodeCoverage
instance = this;
codeCoverageControl = new CodeCoverageControl();
- if (CodeCoverageService.Results != null) {
- codeCoverageControl.AddModules(CodeCoverageService.Results.Modules);
- }
codeCoverageControl.UpdateToolbar();
ProjectService.SolutionClosed += SolutionClosed;
ProjectService.SolutionLoaded += SolutionLoaded;
+
+ ShowSourceCodePanel = CodeCoverageOptions.ShowSourceCodePanel;
+ ShowVisitCountPanel = CodeCoverageOptions.ShowVisitCountPanel;
}
public static CodeCoveragePad Instance {
@@ -76,6 +77,24 @@ namespace ICSharpCode.CodeCoverage
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)
{
codeCoverageControl.UpdateToolbar();
@@ -83,6 +102,7 @@ namespace ICSharpCode.CodeCoverage
void SolutionClosed(object sender, EventArgs e)
{
+ ClearCodeCoverageResults();
codeCoverageControl.UpdateToolbar();
}
}
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs
index 2808e7e261..81f0eaa3ac 100644
--- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageService.cs
@@ -9,6 +9,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
+using ICSharpCode.TextEditor;
using System;
using System.Collections.Generic;
@@ -103,6 +104,15 @@ namespace ICSharpCode.CodeCoverage
}
}
+ public static void ShowCodeCoverage(TextEditorControl textEditor, string fileName)
+ {
+ List sequencePoints = results.GetSequencePoints(fileName);
+ if (sequencePoints.Count > 0) {
+ codeCoverageHighlighter.AddMarkers(textEditor.Document.MarkerStrategy, sequencePoints);
+ textEditor.Refresh();
+ }
+ }
+
static void ShowCodeCoverage()
{
// Highlight any open files.
@@ -131,13 +141,9 @@ namespace ICSharpCode.CodeCoverage
static void ShowCodeCoverage(IViewContent view)
{
- TextEditorDisplayBindingWrapper textEditor = view as TextEditorDisplayBindingWrapper;
- if (textEditor != null && view.FileName != null) {
- List sequencePoints = results.GetSequencePoints(view.FileName);
- if (sequencePoints.Count > 0) {
- codeCoverageHighlighter.AddMarkers(textEditor.textAreaControl.Document.MarkerStrategy, sequencePoints);
- textEditor.textAreaControl.Refresh();
- }
+ TextEditorDisplayBindingWrapper displayBindingWrapper = view as TextEditorDisplayBindingWrapper;
+ if (displayBindingWrapper != null && displayBindingWrapper.TextEditorControl != null && view.FileName != null) {
+ ShowCodeCoverage(displayBindingWrapper.TextEditorControl, view.FileName);
}
}
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/ShowDisplayOptionsDropDown.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowDisplayOptionsDropDown.cs
new file mode 100644
index 0000000000..afdbaefd26
--- /dev/null
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowDisplayOptionsDropDown.cs
@@ -0,0 +1,41 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+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);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/ShowSourceCodeCommand.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowSourceCodeCommand.cs
new file mode 100644
index 0000000000..7999f83953
--- /dev/null
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowSourceCodeCommand.cs
@@ -0,0 +1,29 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+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;
+ }
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/ShowVisitCountCommand.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowVisitCountCommand.cs
new file mode 100644
index 0000000000..d9ea8f5166
--- /dev/null
+++ b/src/AddIns/Misc/CodeCoverage/Project/Src/ShowVisitCountCommand.cs
@@ -0,0 +1,29 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+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;
+ }
+ }
+ }
+ }
+}