Browse Source

ErrorListPad now uses TaskView (patch by David Alpert). Renamed ErrorList to ErrorListPad and OpenTaskView to TaskListPad.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@777 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
d72a6d98b6
  1. 6
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 4
      data/resources/layouts/Debug.xml
  3. 4
      data/resources/layouts/Default.xml
  4. 4
      data/resources/layouts/Plain.xml
  5. 2
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlView.cs
  6. 2
      src/AddIns/Misc/MbUnitPad/Project/Src/MbUnitPad.cs
  7. 2
      src/AddIns/Misc/NAntAddIn/Project/Src/Commands/AbstractRunNAntCommand.cs
  8. 6
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  9. 6
      src/Main/Base/Project/Src/Commands/BuildCommands.cs
  10. 329
      src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorList.cs
  11. 199
      src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs
  12. 13
      src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListToolbarCommands.cs
  13. 39
      src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs
  14. 220
      src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskView.cs

6
AddIns/ICSharpCode.SharpDevelop.addin

@ -54,13 +54,13 @@ @@ -54,13 +54,13 @@
title = "${res:MainWindow.Windows.ErrorList}"
shortcut = "Control|Alt|K"
icon = "PadIcons.ErrorList"
class = "ICSharpCode.SharpDevelop.Gui.ErrorList"/>
class = "ICSharpCode.SharpDevelop.Gui.ErrorListPad"/>
<Pad id = "OpenTaskView"
<Pad id = "TaskList"
category = "Main"
title = "${res:MainWindow.Windows.TaskList}"
icon = "PadIcons.TaskList"
class = "ICSharpCode.SharpDevelop.Gui.OpenTaskView"/>
class = "ICSharpCode.SharpDevelop.Gui.TaskListPad"/>
<Pad id = "CompilerMessageView"
category = "Main"

4
data/resources/layouts/Debug.xml

@ -6,11 +6,11 @@ @@ -6,11 +6,11 @@
<Content ID="0" PersistString="ICSharpCode.MbUnitPad.MbUnitPadContent" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="1" PersistString="ICSharpCode.SharpDevelop.Project.ProjectBrowserPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="2" PersistString="ICSharpCode.SharpDevelop.Gui.SideBarView" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.OpenTaskView" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.TaskListPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="4" PersistString="ICSharpCode.SharpDevelop.Gui.CompilerMessageView" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="5" PersistString="ICSharpCode.SharpDevelop.Gui.PropertyPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="6" PersistString="ICSharpCode.SharpDevelop.Gui.FileScout" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorList" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorListPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="8" PersistString="SearchAndReplace.SearchResultPanel" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="9" PersistString="ICSharpCode.SharpDevelop.Gui.ClassBrowser" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="10" PersistString="ICSharpCode.SharpDevelop.Gui.Pads.BreakPointsPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />

4
data/resources/layouts/Default.xml

@ -6,11 +6,11 @@ @@ -6,11 +6,11 @@
<Content ID="0" PersistString="ICSharpCode.MbUnitPad.MbUnitPadContent" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="1" PersistString="ICSharpCode.SharpDevelop.Project.ProjectBrowserPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="2" PersistString="ICSharpCode.SharpDevelop.Gui.SideBarView" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.OpenTaskView" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.TaskListPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="4" PersistString="ICSharpCode.SharpDevelop.Gui.CompilerMessageView" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="5" PersistString="ICSharpCode.SharpDevelop.Gui.PropertyPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="6" PersistString="ICSharpCode.SharpDevelop.Gui.FileScout" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorList" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorListPad" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="8" PersistString="SearchAndReplace.SearchResultPanel" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="9" PersistString="ICSharpCode.SharpDevelop.Gui.ClassBrowser" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="10" PersistString="ICSharpCode.SharpDevelop.Gui.Pads.BreakPointsPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />

4
data/resources/layouts/Plain.xml

@ -6,11 +6,11 @@ @@ -6,11 +6,11 @@
<Content ID="0" PersistString="ICSharpCode.MbUnitPad.MbUnitPadContent" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="1" PersistString="ICSharpCode.SharpDevelop.Project.ProjectBrowserPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="2" PersistString="ICSharpCode.SharpDevelop.Gui.SideBarView" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.OpenTaskView" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="3" PersistString="ICSharpCode.SharpDevelop.Gui.TaskListPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="4" PersistString="ICSharpCode.SharpDevelop.Gui.CompilerMessageView" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="5" PersistString="ICSharpCode.SharpDevelop.Gui.PropertyPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="6" PersistString="ICSharpCode.SharpDevelop.Gui.FileScout" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorList" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="7" PersistString="ICSharpCode.SharpDevelop.Gui.ErrorListPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="8" PersistString="SearchAndReplace.SearchResultPanel" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="9" PersistString="ICSharpCode.SharpDevelop.Gui.ClassBrowser" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />
<Content ID="10" PersistString="ICSharpCode.SharpDevelop.Gui.Pads.BreakPointsPad" AutoHidePortion="0.25" IsHidden="True" IsFloat="False" />

2
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlView.cs

@ -650,7 +650,7 @@ namespace ICSharpCode.XmlEditor @@ -650,7 +650,7 @@ namespace ICSharpCode.XmlEditor
void ShowErrorList()
{
if (ShowErrorListAfterBuild && TaskService.SomethingWentWrong) {
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront();
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}

2
src/AddIns/Misc/MbUnitPad/Project/Src/MbUnitPad.cs

@ -205,7 +205,7 @@ namespace ICSharpCode.MbUnitPad @@ -205,7 +205,7 @@ namespace ICSharpCode.MbUnitPad
void ShowErrorList()
{
if (TaskService.SomethingWentWrong) {
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront();
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
}

2
src/AddIns/Misc/NAntAddIn/Project/Src/Commands/AbstractRunNAntCommand.cs

@ -292,7 +292,7 @@ namespace ICSharpCode.NAntAddIn.Commands @@ -292,7 +292,7 @@ namespace ICSharpCode.NAntAddIn.Commands
if (tasks.Count > 0) {
//if ((bool)PropertyService.Get("SharpDevelop.ShowTaskListAfterBuild", true)) {
IWorkbench workbench = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.Workbench;
PadDescriptor padDescriptor = workbench.GetPad(typeof(ErrorList));
PadDescriptor padDescriptor = workbench.GetPad(typeof(ErrorListPad));
if (padDescriptor != null) {
WorkbenchSingleton.SafeThreadAsyncCall(padDescriptor, "BringPadToFront");
}

6
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -414,7 +414,7 @@ @@ -414,7 +414,7 @@
<Compile Include="Src\Internal\Doozers\PadDescriptor.cs" />
<Compile Include="Src\Project\MissingProject.cs" />
<Compile Include="Src\Project\UnknownProject.cs" />
<Compile Include="Src\Gui\Pads\ErrorList\ErrorList.cs" />
<Compile Include="Src\Gui\Pads\ErrorList\ErrorListPad.cs" />
<Compile Include="Src\Gui\Pads\ErrorList\ErrorListToolbarCommands.cs" />
<Compile Include="Src\Gui\Pads\CompilerMessageView\CompilerMessageViewToolbarCommands.cs" />
<Compile Include="Src\Services\ParserService\DefaultProjectContent.cs" />
@ -728,7 +728,7 @@ @@ -728,7 +728,7 @@
<Compile Include="Src\TextEditor\Gui\Editor\CompletionWindow\TextCompletionDataProvider.cs" />
<Compile Include="Src\TextEditor\Gui\Editor\CompletionWindow\OverrideCompletionDataProvider.cs" />
<Compile Include="Src\Gui\Pads\TaskList\TaskView.cs" />
<Compile Include="Src\Gui\Pads\TaskList\TaskList.cs" />
<Compile Include="Src\Gui\Pads\TaskList\TaskListPad.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">
@ -755,4 +755,4 @@ @@ -755,4 +755,4 @@
</Content>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>
</Project>

6
src/Main/Base/Project/Src/Commands/BuildCommands.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
LastErrorCount++;
}
if (results.Errors.Count > 0) {
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront();
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
}
@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
LastErrorCount = 1;
LastWarningCount = 0;
TaskService.Add(new Task(null, StringParser.Parse("${res:BackendBindings.ExecutionManager.NoSingleFileCompilation}"), 0, 0, TaskType.Error));
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront();
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
public override void Run()
@ -120,7 +120,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -120,7 +120,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
TaskService.Add(new Task(error));
}
if (results.Errors.Count > 0) {
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront();
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
}

329
src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorList.cs

@ -1,329 +0,0 @@ @@ -1,329 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <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.Project;
namespace ICSharpCode.SharpDevelop.Gui
{
public class ErrorList : AbstractPadContent
{
static ErrorList instance;
public static ErrorList Instance {
get {
return instance;
}
}
ToolStrip toolStrip;
Panel contentPanel = new Panel();
ListView listView = new ListView();
ColumnHeader type = new ColumnHeader();
ColumnHeader line = new ColumnHeader();
ColumnHeader description = new ColumnHeader();
ColumnHeader file = new ColumnHeader();
ColumnHeader path = new ColumnHeader();
ToolTip taskToolTip = new ToolTip();
bool showWarnings = true;
bool showErrors = true;
bool showMessages = true;
public bool ShowErrors {
get {
return showErrors;
}
set {
showErrors = value;
InternalShowResults();
}
}
public bool ShowMessages {
get {
return showMessages;
}
set {
showMessages = value;
InternalShowResults();
}
}
public bool ShowWarnings {
get {
return showWarnings;
}
set {
showWarnings = value;
InternalShowResults();
}
}
public override Control Control {
get {
return contentPanel;
}
}
public ErrorList()
{
instance = this;
type.Text = "!";
RedrawContent();
listView.Columns.Add(type);
listView.Columns.Add(line);
listView.Columns.Add(description);
listView.Columns.Add(file);
listView.Columns.Add(path);
listView.FullRowSelect = true;
listView.AutoArrange = true;
listView.Alignment = ListViewAlignment.Left;
listView.View = View.Details;
listView.Dock = DockStyle.Fill;
listView.GridLines = true;
listView.Activation = ItemActivation.OneClick;
ListViewResize(this, EventArgs.Empty);
TaskService.Cleared += new EventHandler(TaskServiceCleared);
TaskService.Added += new TaskEventHandler(TaskServiceAdded);
TaskService.Removed += new TaskEventHandler(TaskServiceRemoved);
ProjectService.EndBuild += ProjectServiceEndBuild;
ProjectService.SolutionLoaded += OnCombineOpen;
ProjectService.SolutionClosed += OnCombineClosed;
ImageList imglist = new ImageList();
imglist.ColorDepth = ColorDepth.Depth32Bit;
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Error"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Warning"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Information"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Question"));
listView.SmallImageList = listView.LargeImageList = imglist;
// Set up the delays for the ToolTip.
taskToolTip.InitialDelay = 500;
taskToolTip.ReshowDelay = 100;
taskToolTip.AutoPopDelay = 5000;
listView.ItemActivate += new EventHandler(ListViewItemActivate);
listView.MouseMove += new MouseEventHandler(ListViewMouseMove);
listView.Resize += new EventHandler(ListViewResize);
listView.CreateControl();
contentPanel.Controls.Add(listView);
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ErrorList/Toolbar");
toolStrip.Stretch = true;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
contentPanel.Controls.Add(toolStrip);
InternalShowResults();
}
public override void RedrawContent()
{
line.Text = ResourceService.GetString("CompilerResultView.LineText");
description.Text = ResourceService.GetString("CompilerResultView.DescriptionText");
file.Text = ResourceService.GetString("CompilerResultView.FileText");
path.Text = ResourceService.GetString("CompilerResultView.PathText");
}
void OnCombineOpen(object sender, SolutionEventArgs e)
{
listView.Items.Clear();
UpdateToolstripStatus();
}
void OnCombineClosed(object sender, EventArgs e)
{
try {
listView.Items.Clear();
UpdateToolstripStatus();
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void ProjectServiceEndBuild(object sender, EventArgs e)
{
if (TaskService.TaskCount > 0) {
WorkbenchSingleton.Workbench.WorkbenchLayout.ActivatePad(this.GetType().FullName);
}
UpdateToolstripStatus();
}
void ListViewItemActivate(object sender, EventArgs e)
{
if (listView.FocusedItem != null) {
Task task = (Task)listView.FocusedItem.Tag;
System.Diagnostics.Debug.Assert(task != null);
task.JumpToPosition();
}
}
ListViewItem currentListViewItem = null;
void ListViewMouseMove(object sender, MouseEventArgs e)
{
ListViewItem item = listView.GetItemAt(e.X, e.Y);
if (item != currentListViewItem) {
if (item != null) {
Task task = (Task)item.Tag;
string description = task.Description;
if (description != null) {
description = description.Replace("\t", " ");
}
taskToolTip.SetToolTip(listView, description);
taskToolTip.Active = true;
} else {
taskToolTip.RemoveAll();
taskToolTip.Active = false;
}
currentListViewItem = item;
}
}
void ListViewResize(object sender, EventArgs e)
{
type.Width = 24;
line.Width = 50;
int w = listView.Width - type.Width - line.Width;
file.Width = w * 15 / 100;
path.Width = w * 15 / 100;
description.Width = w - file.Width - path.Width - 5;
}
public CompilerResults CompilerResults = null;
void AddTask(Task task)
{
int imageIndex = 0;
switch (task.TaskType) {
case TaskType.Warning:
imageIndex = 1;
if (!ShowWarnings) {
return;
}
break;
case TaskType.Error:
imageIndex = 0;
if (!ShowErrors) {
return;
}
break;
case TaskType.Message:
imageIndex = 3;
if (!ShowMessages) {
return;
}
break;
default:
return;
}
string tmpPath;
if (task.Project != null && task.FileName != null) {
tmpPath = FileUtility.GetRelativePath(task.Project.Directory, task.FileName);
} else {
tmpPath = task.FileName;
}
string fileName = tmpPath;
string path = tmpPath;
try {
fileName = Path.GetFileName(tmpPath);
} catch (Exception) {}
try {
path = Path.GetDirectoryName(tmpPath);
} catch (Exception) {}
ListViewItem item = new ListViewItem(new string[] {
String.Empty,
(task.Line + 1).ToString(),
FormatDescription(task.Description),
fileName,
path
});
item.ImageIndex = item.StateImageIndex = imageIndex;
item.Tag = task;
listView.Items.Add(item);
}
void TaskServiceCleared(object sender, EventArgs e)
{
listView.Items.Clear();
UpdateToolstripStatus();
}
void TaskServiceAdded(object sender, TaskEventArgs e)
{
AddTask(e.Task);
UpdateToolstripStatus();
}
void TaskServiceRemoved(object sender, TaskEventArgs e)
{
Task task = e.Task;
for (int i = 0; i < listView.Items.Count; ++i) {
if ((Task)listView.Items[i].Tag == task) {
listView.Items.RemoveAt(i);
break;
}
}
UpdateToolstripStatus();
}
/// <summary>
/// Removes new lines, carriage returns and tab characters from
/// the list view task description and replaces them with a space.
/// </summary>
/// <param name="description">The task list description.</param>
/// <returns>A formatted task list description.</returns>
string FormatDescription(string description)
{
string FormattedDescription = description.Replace("\r", " ");
FormattedDescription = FormattedDescription.Replace("\t", " ");
return FormattedDescription.Replace("\n", " ");
}
void UpdateToolstripStatus()
{
ToolbarService.UpdateToolbar(toolStrip);
ToolbarService.UpdateToolbarText(toolStrip);
}
void InternalShowResults()
{
// listView.CreateControl is called in the constructor now.
if (!listView.IsHandleCreated) {
return;
}
listView.BeginUpdate();
listView.Items.Clear();
foreach (Task task in TaskService.Tasks) {
AddTask(task);
}
listView.EndUpdate();
UpdateToolstripStatus();
}
}
}

199
src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs

@ -0,0 +1,199 @@ @@ -0,0 +1,199 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <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.Project;
namespace ICSharpCode.SharpDevelop.Gui
{
public class ErrorListPad : AbstractPadContent
{
static ErrorListPad instance;
public static ErrorListPad Instance {
get {
return instance;
}
}
ToolStrip toolStrip;
Panel contentPanel = new Panel();
TaskView taskView = new TaskView();
bool showWarnings = true;
bool showErrors = true;
bool showMessages = true;
public bool ShowErrors {
get {
return showErrors;
}
set {
showErrors = value;
InternalShowResults();
}
}
public bool ShowMessages {
get {
return showMessages;
}
set {
showMessages = value;
InternalShowResults();
}
}
public bool ShowWarnings {
get {
return showWarnings;
}
set {
showWarnings = value;
InternalShowResults();
}
}
public override Control Control {
get {
return contentPanel;
}
}
public ErrorListPad()
{
instance = this;
RedrawContent();
TaskService.Cleared += new EventHandler(TaskServiceCleared);
TaskService.Added += new TaskEventHandler(TaskServiceAdded);
TaskService.Removed += new TaskEventHandler(TaskServiceRemoved);
ProjectService.EndBuild += ProjectServiceEndBuild;
ProjectService.SolutionLoaded += OnCombineOpen;
ProjectService.SolutionClosed += OnCombineClosed;
taskView.CreateControl();
contentPanel.Controls.Add(taskView);
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ErrorList/Toolbar");
toolStrip.Stretch = true;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
contentPanel.Controls.Add(toolStrip);
InternalShowResults();
}
public override void RedrawContent()
{
taskView.RefreshColumnNames();
}
void OnCombineOpen(object sender, SolutionEventArgs e)
{
taskView.ClearTasks();
UpdateToolstripStatus();
}
void OnCombineClosed(object sender, EventArgs e)
{
try {
taskView.ClearTasks();
UpdateToolstripStatus();
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void ProjectServiceEndBuild(object sender, EventArgs e)
{
if (TaskService.TaskCount > 0) {
WorkbenchSingleton.Workbench.WorkbenchLayout.ActivatePad(this.GetType().FullName);
}
UpdateToolstripStatus();
}
public CompilerResults CompilerResults = null;
void AddTask(Task task)
{
switch (task.TaskType) {
case TaskType.Warning:
if (!ShowWarnings) {
return;
}
break;
case TaskType.Error:
if (!ShowErrors) {
return;
}
break;
case TaskType.Message:
if (!ShowMessages) {
return;
}
break;
default:
return;
}
taskView.AddTask(task);
}
void TaskServiceCleared(object sender, EventArgs e)
{
taskView.ClearTasks();
UpdateToolstripStatus();
}
void TaskServiceAdded(object sender, TaskEventArgs e)
{
AddTask(e.Task);
UpdateToolstripStatus();
}
void TaskServiceRemoved(object sender, TaskEventArgs e)
{
taskView.RemoveTask(e.Task);
UpdateToolstripStatus();
}
void UpdateToolstripStatus()
{
ToolbarService.UpdateToolbar(toolStrip);
ToolbarService.UpdateToolbarText(toolStrip);
}
void InternalShowResults()
{
// listView.CreateControl is called in the constructor now.
if (!taskView.IsHandleCreated) {
return;
}
taskView.BeginUpdate();
taskView.ClearTasks();
foreach (Task task in TaskService.Tasks) {
AddTask(task);
}
taskView.EndUpdate();
UpdateToolstripStatus();
}
}
}

13
src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListToolbarCommands.cs

@ -21,10 +21,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -21,10 +21,10 @@ namespace ICSharpCode.SharpDevelop.Gui
{
public override bool IsChecked {
get {
return ErrorList.Instance.ShowErrors;
return ErrorListPad.Instance.ShowErrors;
}
set {
ErrorList.Instance.ShowErrors = value;
ErrorListPad.Instance.ShowErrors = value;
}
}
}
@ -33,10 +33,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -33,10 +33,10 @@ namespace ICSharpCode.SharpDevelop.Gui
{
public override bool IsChecked {
get {
return ErrorList.Instance.ShowWarnings;
return ErrorListPad.Instance.ShowWarnings;
}
set {
ErrorList.Instance.ShowWarnings = value;
ErrorListPad.Instance.ShowWarnings = value;
}
}
}
@ -45,12 +45,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -45,12 +45,11 @@ namespace ICSharpCode.SharpDevelop.Gui
{
public override bool IsChecked {
get {
return ErrorList.Instance.ShowMessages;
return ErrorListPad.Instance.ShowMessages;
}
set {
ErrorList.Instance.ShowMessages = value;
ErrorListPad.Instance.ShowMessages = value;
}
}
}
}

39
src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskList.cs → src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs

@ -17,7 +17,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -17,7 +17,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui
{
public class OpenTaskView : AbstractPadContent
public class TaskListPad : AbstractPadContent
{
TaskView taskView = new TaskView();
@ -27,8 +27,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -27,8 +27,8 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
public OpenTaskView()
{
public TaskListPad()
{
RedrawContent();
TaskService.Cleared += new EventHandler(TaskServiceCleared);
@ -37,8 +37,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -37,8 +37,8 @@ namespace ICSharpCode.SharpDevelop.Gui
ProjectService.SolutionLoaded += OnCombineOpen;
ProjectService.SolutionClosed += OnCombineClosed;
ShowResults2(null, null);
InternalShowResults(null, null);
}
public override void RedrawContent()
@ -48,19 +48,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -48,19 +48,19 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnCombineOpen(object sender, SolutionEventArgs e)
{
taskView.Items.Clear();
taskView.ClearTasks();
}
void OnCombineClosed(object sender, EventArgs e)
{
taskView.Items.Clear();
taskView.ClearTasks();
}
public CompilerResults CompilerResults = null;
void TaskServiceCleared(object sender, EventArgs e)
{
taskView.Items.Clear();
taskView.ClearTasks();
}
void TaskServiceAdded(object sender, TaskEventArgs e)
@ -72,32 +72,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -72,32 +72,19 @@ namespace ICSharpCode.SharpDevelop.Gui
void TaskServiceRemoved(object sender, TaskEventArgs e)
{
Task task = e.Task;
if (task.TaskType == TaskType.Comment) {
for (int i = 0; i < taskView.Items.Count; ++i) {
if ((Task)taskView.Items[i].Tag == task) {
taskView.Items.RemoveAt(i);
break;
}
}
if (e.Task.TaskType == TaskType.Comment) {
taskView.RemoveTask(e.Task);
}
}
void ShowResults2(object sender, EventArgs e)
void InternalShowResults(object sender, EventArgs e)
{
taskView.BeginUpdate();
taskView.Items.Clear();
foreach (Task task in TaskService.CommentTasks) {
taskView.AddTask(task);
}
taskView.EndUpdate();
taskView.UpdateResults(TaskService.CommentTasks);
}
public void ShowResults(object sender, EventArgs e)
{
taskView.Invoke(new EventHandler(ShowResults2));
taskView.Invoke(new EventHandler(InternalShowResults));
// SelectTaskView(null, null);
}
}

220
src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskView.cs

@ -5,7 +5,8 @@ @@ -5,7 +5,8 @@
// <version>$Revision$</version>
// </file>
// much of TaskView's code has been refactored from OpenTaskView.cs & ErrorList.cs
// much of TaskView's code has been refactored from
// TaskList.cs (formerly OpenTaskView.cs) & ErrorList.cs
using System;
using System.Collections;
@ -27,6 +28,28 @@ namespace ICSharpCode.Core @@ -27,6 +28,28 @@ namespace ICSharpCode.Core
/// </summary>
public class TaskView : ListView
{
ColumnHeader type = new ColumnHeader();
ColumnHeader line = new ColumnHeader();
ColumnHeader description = new ColumnHeader();
ColumnHeader file = new ColumnHeader();
ColumnHeader path = new ColumnHeader();
ToolTip taskToolTip = new ToolTip();
public Task SelectedTask {
get {
if (this.FocusedItem==null) {
return null;
}
return (Task)this.FocusedItem.Tag;
}
}
public bool TaskIsSelected {
get {
return this.FocusedItem!=null;
}
}
public TaskView() : base()
{
RefreshColumnNames();
@ -50,10 +73,17 @@ namespace ICSharpCode.Core @@ -50,10 +73,17 @@ namespace ICSharpCode.Core
ImageList imglist = new ImageList();
imglist.ColorDepth = ColorDepth.Depth32Bit;
// HACK: these images must be in the same order as the TaskType enumeration.
// because of how the ListViewItem's ImageIndex is set in TaskView.AddTask();
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Error"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Warning"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Information"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Question"));
// TODO: use reflection and a custom attribute on the TaskType enumeration to tie this ImageList to TaskType
// imglist.Images.Add(ResourceService.GetBitmap(Task.GetBitmapName(TaskType.Error)));
// imglist.Images.Add(ResourceService.GetBitmap(Task.GetBitmapName(TaskType.Warning)));
// imglist.Images.Add(ResourceService.GetBitmap(Task.GetBitmapName(TaskType.Message)));
// imglist.Images.Add(ResourceService.GetBitmap(Task.GetBitmapName(TaskType.Comment)));
this.SmallImageList = this.LargeImageList = imglist;
// Set up the delays for the ToolTip.
@ -64,27 +94,20 @@ namespace ICSharpCode.Core @@ -64,27 +94,20 @@ namespace ICSharpCode.Core
// // Force the ToolTip text to be displayed whether or not the form is active.
// taskToolTip.ShowAlways = false;
SortBy(TaskViewCols.Path);
}
ColumnHeader type = new ColumnHeader();
ColumnHeader line = new ColumnHeader();
ColumnHeader description = new ColumnHeader();
ColumnHeader file = new ColumnHeader();
ColumnHeader path = new ColumnHeader();
ToolTip taskToolTip = new ToolTip();
public void RefreshColumnNames()
{
type.Text = "!";
type.Text = "!";
line.Text = ResourceService.GetString("CompilerResultView.LineText");
description.Text = ResourceService.GetString("CompilerResultView.DescriptionText");
file.Text = ResourceService.GetString("CompilerResultView.FileText");
path.Text = ResourceService.GetString("CompilerResultView.PathText");
}
#region Event Overrides
protected override void OnResize(EventArgs e) {
base.OnResize(e);
// recalculate column widths
type.Width = 24;
line.Width = 50;
@ -92,23 +115,22 @@ namespace ICSharpCode.Core @@ -92,23 +115,22 @@ namespace ICSharpCode.Core
file.Width = w * 15 / 100;
path.Width = w * 15 / 100;
description.Width = w - file.Width - path.Width - 5;
base.OnResize(e);
}
protected override void OnColumnClick(ColumnClickEventArgs e)
{
{
SortBy(e.Column);
base.OnColumnClick(e);
this.ListViewItemSorter = new TaskViewSorter(e.Column);
}
protected override void OnItemActivate(EventArgs e) {
base.OnItemActivate(e);
if (this.FocusedItem != null) {
Task task = (Task)this.FocusedItem.Tag;
System.Diagnostics.Debug.Assert(task != null);
task.JumpToPosition();
System.Diagnostics.Debug.Assert(SelectedTask != null);
SelectedTask.JumpToPosition();
}
base.OnItemActivate(e);
}
ListViewItem currentListViewItem = null;
@ -132,11 +154,17 @@ namespace ICSharpCode.Core @@ -132,11 +154,17 @@ namespace ICSharpCode.Core
currentListViewItem = item;
}
}
#endregion
#region Task Management
public void ClearTasks()
{
this.Items.Clear();
}
public void AddTask(Task task)
{
int imageIndex = 3;
string tmpPath;
if (task.Project != null && task.FileName != null) {
tmpPath = FileUtility.GetRelativePath(task.Project.Directory, task.FileName);
@ -162,14 +190,16 @@ namespace ICSharpCode.Core @@ -162,14 +190,16 @@ namespace ICSharpCode.Core
fileName,
path
});
item.ImageIndex = item.StateImageIndex = imageIndex;
item.ImageIndex = item.StateImageIndex = (int)task.TaskType;
item.Tag = task;
// insert new item into sorted list (binary search)
// ... using the current ListViewItemSorter
int left = 0;
int right = this.Items.Count - 1;
while (left <= right) {
int m = left + (right - left) / 2;
if (CompareItems(item, this.Items[m])) {
if (this.ListViewItemSorter.Compare(item, this.Items[m]) > 0) {
left = m + 1;
} else {
right = m - 1;
@ -178,28 +208,6 @@ namespace ICSharpCode.Core @@ -178,28 +208,6 @@ namespace ICSharpCode.Core
this.Items.Insert(left, item);
}
// TODO: DavidAlpert - convert CompareItems into an IComparer implementation and
// install it as the default ListViewItemSorter; then modify
// AddTask to use the current ListViewItemSorter when adding
// new items.
/// <summary>Returns true when a &gt; b</summary>
bool CompareItems(ListViewItem a, ListViewItem b)
{
// TODO: DavidAlpert - convert ListViewItem.SubItem index references into TaskViewCol enum.
// insert sorted by: Directory, FileName, Line
int res = string.Compare(a.SubItems[3].Text, b.SubItems[4].Text, StringComparison.InvariantCultureIgnoreCase);
if (res > 0) return true;
if (res < 0) return false;
res = string.Compare(a.SubItems[3].Text, b.SubItems[3].Text, StringComparison.InvariantCultureIgnoreCase);
if (res > 0) return true;
if (res < 0) return false;
Task x = (Task)a.Tag;
Task y = (Task)b.Tag;
return x.Line > y.Line;
}
/// <summary>
/// Removes new lines, carriage returns and tab characters from
/// the list view task description and replaces them with a space.
@ -213,81 +221,124 @@ namespace ICSharpCode.Core @@ -213,81 +221,124 @@ namespace ICSharpCode.Core
return FormattedDescription.Replace("\n", " ");
}
public void RemoveTask(Task task)
{
for (int i = 0; i < Items.Count; ++i) {
if ((Task)Items[i].Tag == task) {
Items.RemoveAt(i);
break;
}
}
}
public void UpdateResults(System.Collections.Generic.IEnumerable<ICSharpCode.Core.Task> taskSet)
{
this.BeginUpdate();
this.ClearTasks();
foreach (Task task in taskSet) {
this.AddTask(task);
}
this.EndUpdate();
}
#endregion
#region Custom IComparer for sorting TaskView.
int currentSortColumn = -1;
SortOrder currentSortOrder = SortOrder.Ascending;
/// <summary>
/// Custom <see cref="IComparer"/> for TaskView.
/// Applies the specified sort request by creating,
/// configuring, and installing a
/// <see cref="TaskViewSorter"/>.
/// </summary>
private class TaskViewSorter : IComparer
private void SortBy(TaskViewCols col)
{
static int currentSortColumn = -1;
static SortOrder currentSortOrder = SortOrder.Ascending;
public TaskViewSorter(int col)
{
if (col==currentSortColumn) {
if (currentSortOrder == SortOrder.Ascending) {
currentSortOrder = SortOrder.Descending;
} else {
currentSortOrder = SortOrder.Ascending;
}
SortBy((int)col);
}
private void SortBy(int col)
{
if (col==currentSortColumn) {
// same as last sort; toggle the current sort order.
if (currentSortOrder == SortOrder.Ascending) {
currentSortOrder = SortOrder.Descending;
} else {
currentSortColumn = col;
currentSortOrder = SortOrder.Ascending;
}
} else {
currentSortColumn = col;
currentSortOrder = SortOrder.Ascending;
}
/// <summary>
/// Compares 2 Int32 objects using <see cref="Int32.CompareTo"/>.
/// </summary>
/// <returns>
/// A signed number indicating the relative values of two Int32
/// objects; less than zero if b is less than a.
/// </returns>
protected int CompareAsInt32(object a, object b)
this.ListViewItemSorter =
new TaskViewSorter(currentSortColumn, currentSortOrder);
}
/// <summary>
/// Custom <see cref="IComparer"/> for TaskView.
/// </summary>
private class TaskViewSorter : IComparer
{
int sortCol = -1;
SortOrder sortOrder = SortOrder.Ascending;
public TaskViewSorter(int col, SortOrder order)
{
return Convert.ToInt32(a).CompareTo(Convert.ToInt32(b));
sortCol = col;
sortOrder = order;
}
protected int CompareAsText(ListViewItem a, ListViewItem b, TaskViewCols c)
protected int CompareLineNumbers(ListViewItem a, ListViewItem b)
{
return CompareAsText(a, b, (int)c);
return ((Task)a.Tag).Line.CompareTo(((Task)b.Tag).Line);
}
protected int CompareAsText(ListViewItem a, ListViewItem b, int c)
protected int CompareAsText(ListViewItem a, ListViewItem b, TaskViewCols col)
{
return a.SubItems[(int)c].Text.CompareTo(b.SubItems[(int)c].Text);;
return CompareAsText(a, b, (int)col);
}
protected int CompareAsText(ListViewItem a, ListViewItem b, int col)
{
return a.SubItems[col].Text.CompareTo(b.SubItems[col].Text);;
}
#region System.Collections.IComparer interface implementation
/// <summary>
/// The meat of this IComparer class; intelligently compares
/// two FileReportResults items.
/// two TaskView ListItems.
/// </summary>
/// <returns>
/// A signed integer indicating the relative sort ranking
/// of item <paramref name="x"/> relative to item
/// <paramref name="y"/>.
/// Return value greater than zero: x > y.
/// Return value is zero: x == y.
/// Return value is less than zero: x \< y.
/// </returns>
public int Compare(object x, object y) {
ListViewItem a = (ListViewItem)x; // List item a
ListViewItem b = (ListViewItem)y; // List item b
int r = 0; // the result
if (currentSortColumn==(int)TaskViewCols.Line) {
r = CompareAsInt32(a.SubItems[currentSortColumn].Text,
b.SubItems[currentSortColumn].Text);
if (sortCol==(int)TaskViewCols.Line) {
// Sorts as Line Number
r = CompareLineNumbers(a, b);
} else { // all others
r = CompareAsText(a, b, currentSortColumn);
r = CompareAsText(a, b, sortCol);
// doing this test first is an optimization; we only
// need to check for secondary sort conditions if
// the primary test is a tie.
if (r == 0) {
if (currentSortColumn==(int)TaskViewCols.Path) {
if (sortCol==(int)TaskViewCols.Path) {
// Sorts as Path -> File
r = CompareAsText(a, b, TaskViewCols.File);
@ -295,19 +346,18 @@ namespace ICSharpCode.Core @@ -295,19 +346,18 @@ namespace ICSharpCode.Core
if (r == 0) {
// Sorts as Path -> File -> Line
r = CompareAsText(a, b, TaskViewCols.Line);
r = CompareLineNumbers(a, b);
}
} else if (currentSortColumn==(int)TaskViewCols.File) {
} else if (sortCol==(int)TaskViewCols.File) {
// Sorts as File -> Line
r = CompareAsInt32(a.SubItems[(int)TaskViewCols.Line].Text,
b.SubItems[(int)TaskViewCols.Line].Text);
r = CompareLineNumbers(a, b);
}
}
}
if (currentSortOrder == SortOrder.Descending) {
if (sortOrder == SortOrder.Descending) {
// Return the opposite ranking
return -r;
}

Loading…
Cancel
Save