diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index e2655ade25..e2977046ef 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -512,6 +512,25 @@ tooltip = "Toggle Word Wrap" class = "ICSharpCode.SharpDevelop.Gui.ToggleeMessageViewWordWrap"/> + + + + + 0) { WorkbenchSingleton.Workbench.GetPad(typeof(ErrorList)).BringPadToFront(); diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs index c09eca96cb..a4695df376 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Gui /// This class displays the errors and warnings which the compiler outputs and /// allows the user to jump to the source of the warnig / error /// - public class CompilerMessageView : AbstractPadContent + public class CompilerMessageView : AbstractPadContent, IClipboardHandler { static CompilerMessageView instance; @@ -95,7 +95,8 @@ namespace ICSharpCode.SharpDevelop.Gui myPanel.SuspendLayout(); textEditorControl.Dock = DockStyle.Fill; textEditorControl.ReadOnly = true; - + textEditorControl.ContextMenuStrip = MenuService.CreateContextMenu(this, "/SharpDevelop/Pads/CompilerMessageView/ContextMenu"); + properties = (Properties)PropertyService.Get(OutputWindowOptionsPanel.OutputWindowsProperty, new Properties()); textEditorControl.Font = FontSelectionPanel.ParseFont(properties.Get("DefaultFont", new Font("Courier New", 10).ToString()).ToString()); @@ -340,5 +341,59 @@ namespace ICSharpCode.SharpDevelop.Gui public event EventHandler MessageCategoryAdded; public event EventHandler SelectedCategoryIndexChanged; + #region ICSharpCode.SharpDevelop.Gui.IClipboardHandler interface implementation + public bool EnableCut { + get { + return false; + } + } + + public bool EnableCopy { + get { + return true; + } + } + + public bool EnablePaste { + get { + return false; + } + } + + public bool EnableDelete { + get { + return false; + } + } + + public bool EnableSelectAll { + get { + return true; + } + } + + public void Cut() + { + } + + public void Copy() + { + textEditorControl.Copy(); + } + + public void Paste() + { + } + + public void Delete() + { + } + + public void SelectAll() + { + textEditorControl.SelectAll(); + } + #endregion + } } diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompulerMessageViewToolbarCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompulerMessageViewToolbarCommands.cs index 014a632526..e6a79b2bb3 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompulerMessageViewToolbarCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompulerMessageViewToolbarCommands.cs @@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public class ClearOutputWindow : AbstractComboBoxCommand + public class ClearOutputWindow : AbstractCommand { public override void Run() { diff --git a/src/Main/Base/Project/Src/Project/MSBuildProject.cs b/src/Main/Base/Project/Src/Project/MSBuildProject.cs index 91d93ce8df..7d3c61b621 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildProject.cs @@ -264,9 +264,12 @@ namespace ICSharpCode.SharpDevelop.Project // isDirty = TaskService.Errors != 0; // } // - readonly static Regex normalError = new Regex(@"^(?\S.*)\((?\d+),(?\d+)\):\s+(?\w+)\s+(?[\d\w]+):\s+(?.*)$", RegexOptions.Compiled); - readonly static Regex generalError = new Regex(@"^(?\S.+)\s+(?[\d\w]+):\s+(?.*)$", RegexOptions.Compiled); - readonly static Regex projectName = new Regex(@"^Project\s+\""(?[^""]*)\""", RegexOptions.Compiled); + readonly static Regex normalError = new Regex(@"(?\S.*)\((?\d+),(?\d+)\):\s+(?\w+)\s+(?[\d\w]+):\s+(?.*)", RegexOptions.Compiled); + readonly static Regex compilerError = new Regex(@"(?[^:]*):\s+(?\w+)\s+(?[\d\w]+):\s+(?.*)", RegexOptions.Compiled); + readonly static Regex generalError = new Regex(@"(?\S.+)\s+(?[\d\w]+):\s+(?.*)", RegexOptions.Compiled); + + readonly static Regex projectName = new Regex(@"Project\s+\""[^""]*\""[^""]*\""(?[^""]*)\""", RegexOptions.Compiled); + static CompilerError GetCompilerError(string line, string workingPath) { @@ -281,6 +284,14 @@ namespace ICSharpCode.SharpDevelop.Project error.ErrorText = match.Result("${message}"); return error; } + match = compilerError.Match(line); + if (match.Success) { + CompilerError error = new CompilerError(); + error.IsWarning = match.Result("${error}") == "warning"; + error.ErrorNumber = match.Result("${number}"); + error.ErrorText = match.Result("${who}") + ":" + match.Result("${message}"); + return error; + } match = generalError.Match(line); if (match.Success) { @@ -292,7 +303,7 @@ namespace ICSharpCode.SharpDevelop.Project } return null; } - + public static CompilerResults RunMSBuild(string fileName, string target) { WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront(); @@ -317,11 +328,9 @@ namespace ICSharpCode.SharpDevelop.Project string line = reader.ReadLine(); if (line != null) { TaskService.BuildMessageViewCategory.AppendText(line + Environment.NewLine); - Match match = projectName.Match(line); if (match.Success) { string name = match.Result("${name}"); - if (name != null) { workingDirectory = Path.GetDirectoryName(name); } @@ -330,12 +339,33 @@ namespace ICSharpCode.SharpDevelop.Project if (error != null) { results.Errors.Add(error); } - } + } results.Output.Add(line); } System.Windows.Forms.Application.DoEvents(); } - TaskService.BuildMessageViewCategory.AppendText(reader.ReadToEnd() + Environment.NewLine); + while (true) { + string line = reader.ReadLine(); + if (line == null) { + break; + } + TaskService.BuildMessageViewCategory.AppendText(line + Environment.NewLine); + Console.WriteLine(line); + Match match = projectName.Match(line); + if (match.Success) { + string name = match.Result("${name}"); + if (name != null) { + workingDirectory = Path.GetDirectoryName(name); + } + } else { + CompilerError error = GetCompilerError(line, workingDirectory); + if (error != null) { + results.Errors.Add(error); + } + } + results.Output.Add(line); + } +// TaskService.BuildMessageViewCategory.AppendText(reader.ReadToEnd() + Environment.NewLine); p.WaitForExit(); // AfterBuild(); return results; diff --git a/src/Main/Base/Project/Src/Services/Tasks/Task.cs b/src/Main/Base/Project/Src/Services/Tasks/Task.cs index be8f628144..8db2648178 100644 --- a/src/Main/Base/Project/Src/Services/Tasks/Task.cs +++ b/src/Main/Base/Project/Src/Services/Tasks/Task.cs @@ -89,19 +89,6 @@ namespace ICSharpCode.Core this.line = line; } - public Task(IProject project, CompilerError error) - { - this.project = project; - type = error.IsWarning ? TaskType.Warning : TaskType.Error; - column = error.Column - 1; - line = error.Line - 1; - description = error.ErrorText + "(" + error.ErrorNumber + ")"; - if (!Path.IsPathRooted(error.FileName)) { - fileName = Path.Combine(project.Directory, error.FileName); - } else { - fileName = error.FileName; - } - } public Task(CompilerError error) { type = error.IsWarning ? TaskType.Warning : TaskType.Error; diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/Gui/MenuCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/Gui/MenuCommand.cs index 787fbba061..2db60b2d40 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/Gui/MenuCommand.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/StandardErbauer/MenuItem/Gui/MenuCommand.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.Core { object caller; Codon codon; - IMenuCommand menuCommand = null; + ICommand menuCommand = null; string description = ""; string localizedText = null; @@ -31,7 +31,7 @@ namespace ICSharpCode.Core } } - public IMenuCommand Command { + public ICommand Command { get { if (menuCommand == null) { CreateCommand(); @@ -43,7 +43,7 @@ namespace ICSharpCode.Core void CreateCommand() { try { - menuCommand = (IMenuCommand)codon.AddIn.CreateObject(codon.Properties["class"]); + menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]); } catch (Exception e) { MessageService.ShowError(e, "Can't create menu command : " + codon.ID); } @@ -113,8 +113,8 @@ namespace ICSharpCode.Core ConditionFailedAction failedAction = codon.GetFailedAction(caller); bool isEnabled = failedAction != ConditionFailedAction.Disable; - if (menuCommand != null) { - isEnabled &= menuCommand.IsEnabled; + if (menuCommand != null && menuCommand is IMenuCommand) { + isEnabled &= ((IMenuCommand)menuCommand).IsEnabled; } return isEnabled; }