diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin
index b452b886dc..7d23279705 100644
--- a/AddIns/ICSharpCode.SharpDevelop.addin
+++ b/AddIns/ICSharpCode.SharpDevelop.addin
@@ -1046,7 +1046,7 @@
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.OutputWindowOptionsPanel"/>
+ class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.ProjectAndSolutionOptions"/>
diff --git a/src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs b/src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs
index 7eaccd100d..9c5a960e6a 100644
--- a/src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs
+++ b/src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs
@@ -44,7 +44,7 @@ namespace ICSharpCode.CodeAnalysis
public void Initialize(IEventSource eventSource)
{
this.eventSource = eventSource;
- engineWorker.OutputText("${res:ICSharpCode.CodeAnalysis.RunningFxCopOn} " + Path.GetFileNameWithoutExtension(engineWorker.CurrentProjectFile));
+ engineWorker.OutputText(StringParser.Parse("${res:ICSharpCode.CodeAnalysis.RunningFxCopOn} " + Path.GetFileNameWithoutExtension(engineWorker.CurrentProjectFile)));
eventSource.ErrorRaised += OnError;
eventSource.WarningRaised += OnWarning;
}
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index c4e556d6d9..7859a48b49 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -202,6 +202,10 @@
LoadSaveOptions.xaml
Code
+
+ ProjectAndSolutionOptions.xaml
+ Code
+
SelectCulturePanel.xaml
Code
@@ -256,7 +260,7 @@
-
+
@@ -690,8 +694,6 @@
Configuration\GlobalAssemblyInfo.cs
-
-
@@ -826,6 +828,7 @@
GotoDialog.cs
+
diff --git a/src/Main/Base/Project/Resources/ProjectAndSolutionOptionsPanel.xfrm b/src/Main/Base/Project/Resources/ProjectAndSolutionOptionsPanel.xfrm
deleted file mode 100644
index 659f5e20d7..0000000000
--- a/src/Main/Base/Project/Resources/ProjectAndSolutionOptionsPanel.xfrm
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml
new file mode 100644
index 0000000000..3abc057693
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml.cs
new file mode 100644
index 0000000000..0c7bd05a76
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml.cs
@@ -0,0 +1,96 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Windows;
+using System.Windows.Controls;
+
+using ICSharpCode.Core;
+
+namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
+{
+ public partial class ProjectAndSolutionOptions : OptionPanel
+ {
+ public ProjectAndSolutionOptions()
+ {
+ InitializeComponent();
+
+ FillComboBoxWithEnumValues(typeof(Project.BuildOnExecuteSetting), onExecuteComboBox);
+ FillComboBoxWithEnumValues(typeof(Project.BuildOutputVerbosity), verbosityComboBox);
+ }
+
+ void FillComboBoxWithEnumValues(Type type, ComboBox comboBox)
+ {
+ foreach (Project.BuildOnExecuteSetting element in Enum.GetValues(type)) {
+ object[] attr = type.GetField(Enum.GetName(type, element)).GetCustomAttributes(typeof(DescriptionAttribute), false);
+ string description;
+ if (attr.Length > 0) {
+ description = StringParser.Parse((attr[0] as DescriptionAttribute).Description);
+ } else {
+ description = Enum.GetName(type, element);
+ }
+ comboBox.Items.Add(description);
+ }
+ }
+
+ void defaultProjectLocationButtonClick(object sender, RoutedEventArgs e)
+ {
+ using (var fdiag = FileService.CreateFolderBrowserDialog("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SelectDefaultProjectLocationDialog.Title}", defaultProjectLocationTextBox.Text)) {
+ if (fdiag.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
+ defaultProjectLocationTextBox.Text = fdiag.SelectedPath;
+ }
+ }
+ }
+
+ public override void LoadOptions()
+ {
+ base.LoadOptions();
+ defaultProjectLocationTextBox.Text = DefaultProjectCreationPath;
+ parallelBuildCount.Value = Project.BuildOptions.DefaultParallelProjectCount;
+ onExecuteComboBox.SelectedIndex = (int)Project.BuildModifiedProjectsOnlyService.Setting;
+ verbosityComboBox.SelectedIndex = (int)Project.BuildOptions.DefaultBuildOutputVerbosity;
+ }
+
+ public override bool SaveOptions()
+ {
+ // check for correct settings
+ string projectPath = defaultProjectLocationTextBox.Text;
+ if (projectPath.Length > 0) {
+ if (!FileUtility.IsValidPath(projectPath)) {
+ MessageService.ShowError(StringParser.Parse("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.InvalidProjectPathSpecified}"));
+ return false;
+ }
+ }
+ Project.BuildOptions.DefaultParallelProjectCount = (int)parallelBuildCount.Value;
+ Project.BuildModifiedProjectsOnlyService.Setting = (Project.BuildOnExecuteSetting)onExecuteComboBox.SelectedIndex;
+ Project.BuildOptions.DefaultBuildOutputVerbosity = (Project.BuildOutputVerbosity)verbosityComboBox.SelectedIndex;
+ return base.SaveOptions();
+ }
+
+ public static string DefaultProjectCreationPath {
+ get {
+ return PropertyService.Get("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath",
+ Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
+ "SharpDevelop Projects"));
+ }
+ set {
+ PropertyService.Set("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath", value);
+ }
+ }
+
+ public static bool LoadPrevProjectAtStartup {
+ get {
+ return PropertyService.Get("SharpDevelop.LoadPrevProjectOnStartup", false);
+ }
+ set {
+ PropertyService.Set("SharpDevelop.LoadPrevProjectOnStartup", value);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptionsPanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptionsPanel.cs
deleted file mode 100644
index 1d76cff2d6..0000000000
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptionsPanel.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-//
-//
-//
-// $Revision$
-//
-
-using System;
-using System.ComponentModel;
-using System.IO;
-using System.Windows.Forms;
-
-using ICSharpCode.Core;
-
-namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
-{
- public class ProjectAndSolutionOptionsPanel : XmlFormsOptionPanel
- {
- public override void LoadPanelContents()
- {
- SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.ProjectAndSolutionOptionsPanel.xfrm"));
-
- // read properties
- ControlDictionary["projectLocationTextBox"].Text = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath",
- Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
- "SharpDevelop Projects")).ToString();
-
- ((CheckBox)ControlDictionary["loadPrevProjectCheckBox"]).Checked = PropertyService.Get("SharpDevelop.LoadPrevProjectOnStartup", false);
- ((CheckBox)ControlDictionary["showErrorListCheckBox"]).Checked = Project.BuildOptions.ShowErrorListAfterBuild;
- ((NumericUpDown)ControlDictionary["parallelBuildNumericUpDown"]).Value = Project.BuildOptions.DefaultParallelProjectCount;
-
- ((Button)ControlDictionary["selectProjectLocationButton"]).Click += new EventHandler(SelectProjectLocationButtonClicked);
-
- ComboBox onExecuteComboBox = Get("onExecute");
- Type type = typeof(Project.BuildOnExecuteSetting);
- foreach (Project.BuildOnExecuteSetting element in Enum.GetValues(type)) {
- object[] attr = type.GetField(Enum.GetName(type, element)).GetCustomAttributes(typeof(DescriptionAttribute), false);
- string description;
- if (attr.Length > 0) {
- description = StringParser.Parse((attr[0] as DescriptionAttribute).Description);
- } else {
- description = Enum.GetName(type, element);
- }
- onExecuteComboBox.Items.Add(description);
- }
- onExecuteComboBox.SelectedIndex = (int)Project.BuildModifiedProjectsOnlyService.Setting;
- }
-
- public override bool StorePanelContents()
- {
- // check for correct settings
- string projectPath = ControlDictionary["projectLocationTextBox"].Text;
- if (projectPath.Length > 0) {
- if (!FileUtility.IsValidPath(projectPath)) {
- MessageService.ShowError(StringParser.Parse("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.InvalidProjectPathSpecified}"));
- return false;
- }
- }
-
- // set properties
- PropertyService.Set("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath", projectPath);
- PropertyService.Set("SharpDevelop.LoadPrevProjectOnStartup", ((CheckBox)ControlDictionary["loadPrevProjectCheckBox"]).Checked);
- Project.BuildOptions.ShowErrorListAfterBuild = ((CheckBox)ControlDictionary["showErrorListCheckBox"]).Checked;
- Project.BuildOptions.DefaultParallelProjectCount = (int)((NumericUpDown)ControlDictionary["parallelBuildNumericUpDown"]).Value;
-
- Project.BuildModifiedProjectsOnlyService.Setting = (Project.BuildOnExecuteSetting)Get("onExecute").SelectedIndex;
-
- return true;
- }
-
- void SelectProjectLocationButtonClicked(object sender, EventArgs e)
- {
- TextBox projectLocationTextBox = (TextBox)ControlDictionary["projectLocationTextBox"];
- using (FolderBrowserDialog fdiag = FileService.CreateFolderBrowserDialog("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SelectDefaultProjectLocationDialog.Title}", projectLocationTextBox.Text)) {
- if (fdiag.ShowDialog() == DialogResult.OK) {
- projectLocationTextBox.Text = fdiag.SelectedPath;
- }
- }
- }
- }
-}
diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs
index 307bd45a09..221e10c311 100644
--- a/src/Main/Base/Project/Src/Project/AbstractProject.cs
+++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs
@@ -523,6 +523,7 @@ namespace ICSharpCode.SharpDevelop.Project
// start of default implementation
var configMatchings = this.ParentSolution.GetActiveConfigurationsAndPlatformsForProjects(options.SolutionConfiguration, options.SolutionPlatform);
ProjectBuildOptions projectOptions = new ProjectBuildOptions(isRootBuildable ? options.ProjectTarget : options.TargetForDependencies);
+ projectOptions.BuildOutputVerbosity = options.BuildOutputVerbosity;
// find the project configuration
foreach (var matching in configMatchings) {
if (matching.Project == this) {
diff --git a/src/Main/Base/Project/Src/Project/BuildEngine.cs b/src/Main/Base/Project/Src/Project/BuildEngine.cs
index a572e7b6bb..e356387759 100644
--- a/src/Main/Base/Project/Src/Project/BuildEngine.cs
+++ b/src/Main/Base/Project/Src/Project/BuildEngine.cs
@@ -111,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project
public void ReportMessage(string message)
{
- messageView.AppendLine(ICSharpCode.Core.StringParser.Parse(message));
+ messageView.AppendLine(message);
}
public void Done(bool success)
@@ -198,7 +198,7 @@ namespace ICSharpCode.SharpDevelop.Project
engine.cancellationRegistration = engine.progressMonitor.CancellationToken.Register(engine.BuildCancelled);
- engine.ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildStarted}");
+ engine.ReportMessageLine("${res:MainWindow.CompilerMessages.BuildStarted}");
engine.StartBuildProjects();
engine.UpdateProgressTaskName();
}
@@ -516,15 +516,15 @@ namespace ICSharpCode.SharpDevelop.Project
if (buildIsCancelled) {
results.Result = BuildResultCode.Cancelled;
- ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildCancelled}");
+ ReportMessageLine("${res:MainWindow.CompilerMessages.BuildCancelled}");
} else if (rootNode.hasErrors) {
results.Result = BuildResultCode.Error;
- ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildFailed}" + buildTime);
+ ReportMessageLine("${res:MainWindow.CompilerMessages.BuildFailed}" + buildTime);
} else {
results.Result = BuildResultCode.Success;
- ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildFinished}" + buildTime);
+ ReportMessageLine("${res:MainWindow.CompilerMessages.BuildFinished}" + buildTime);
}
cancellationRegistration.Dispose();
progressMonitor.Dispose();
@@ -637,6 +637,11 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
+ void ReportMessageLine(string message)
+ {
+ ReportMessageInternal(StringParser.Parse(message));
+ }
+
void ReportMessageInternal(string message)
{
if (combinedBuildFeedbackSink != null)
diff --git a/src/Main/Base/Project/Src/Project/BuildOptions.cs b/src/Main/Base/Project/Src/Project/BuildOptions.cs
index 28b4d19a64..cc6d81ca77 100644
--- a/src/Main/Base/Project/Src/Project/BuildOptions.cs
+++ b/src/Main/Base/Project/Src/Project/BuildOptions.cs
@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
+using Microsoft.Build.Framework;
namespace ICSharpCode.SharpDevelop.Project
{
@@ -43,6 +44,17 @@ namespace ICSharpCode.SharpDevelop.Project
/// Specifies the project platform used for the build.
///
public string Platform { get; set; }
+
+ ///
+ /// Gets/Sets the verbosity of build output.
+ ///
+ public BuildOutputVerbosity BuildOutputVerbosity { get; set; }
+ }
+
+ public enum BuildOutputVerbosity
+ {
+ Normal,
+ Diagnostic
}
///
@@ -68,6 +80,15 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
+ public static BuildOutputVerbosity DefaultBuildOutputVerbosity {
+ get {
+ return PropertyService.Get("SharpDevelop.DefaultBuildOutputVerbosity", BuildOutputVerbosity.Normal);
+ }
+ set {
+ PropertyService.Set("SharpDevelop.DefaultBuildOutputVerbosity", value);
+ }
+ }
+
IDictionary globalAdditionalProperties = new SortedList();
IDictionary projectAdditionalProperties = new SortedList();
@@ -91,6 +112,11 @@ namespace ICSharpCode.SharpDevelop.Project
///
public int ParallelProjectCount { get; set; }
+ ///
+ /// Gets/Sets the verbosity of build output.
+ ///
+ public BuildOutputVerbosity BuildOutputVerbosity { get; set; }
+
public BuildOptions(BuildTarget target, BuildCallback callback)
{
this.callback = callback;
@@ -99,6 +125,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.BuildDependentProjects = true;
this.ParallelProjectCount = DefaultParallelProjectCount;
+ this.BuildOutputVerbosity = DefaultBuildOutputVerbosity;
}
readonly BuildCallback callback;
diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildLogFileLogger.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildLogFileLogger.cs
deleted file mode 100644
index a1143dc044..0000000000
--- a/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildLogFileLogger.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-//
-//
-//
-// $Revision$
-//
-
-using System;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Logging;
-using System.IO;
-
-namespace ICSharpCode.SharpDevelop.Project
-{
- sealed class BuildLogFileLogger : ConsoleLogger
- {
- string fileName;
- StreamWriter writer;
-
- public BuildLogFileLogger(string fileName, LoggerVerbosity verbosity)
- : base(verbosity)
- {
- this.fileName = fileName;
- base.WriteHandler = Write;
- }
-
- public override void Initialize(IEventSource eventSource)
- {
- OpenFile();
- base.Initialize(eventSource);
- }
-
- public override void Initialize(IEventSource eventSource, int nodeCount)
- {
- OpenFile();
- base.Initialize(eventSource, nodeCount);
- }
-
- void OpenFile()
- {
- writer = new StreamWriter(fileName);
- }
-
- public override void Shutdown()
- {
- base.Shutdown();
- writer.Close();
- writer = null;
- }
-
- void Write(string text)
- {
- if (writer != null)
- writer.Write(text);
- }
- }
-}
diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
index de91525466..4b17ad49d1 100755
--- a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
+++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
@@ -55,7 +55,10 @@ namespace ICSharpCode.SharpDevelop.Project
// 'BuildingSolutionFile' tells MSBuild that we took care of building a project's dependencies
// before trying to build the project itself. This speeds up compilation because it prevents MSBuild from
// repeatedly looking if a project needs to be rebuilt.
- { "BuildingSolutionFile", "true" }
+ { "BuildingSolutionFile", "true" },
+ // BuildingSolutionFile does not work in MSBuild 4.0 anymore, but BuildingInsideVisualStudio
+ // can be used to get the same effect.
+ { "BuildingInsideVisualStudio", "true" }
};
///
@@ -189,10 +192,18 @@ namespace ICSharpCode.SharpDevelop.Project
InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames);
- List loggers = new List {
- new SharpDevelopLogger(this),
- //new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic)
- };
+ List loggers = new List();
+ loggers.Add(new SharpDevelopLogger(this));
+ if (options.BuildOutputVerbosity == BuildOutputVerbosity.Diagnostic) {
+ this.ReportMessageEvents = true;
+ this.ReportAllTaskFinishedEvents = true;
+ this.ReportAllTaskStartedEvents = true;
+ this.ReportTargetFinishedEvents = true;
+ this.ReportTargetStartedEvents = true;
+ this.ReportUnknownEvents = true;
+ loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
+ }
+ //loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) {
loggers.Add(loggerProvider.CreateLogger(this));
}
@@ -329,7 +340,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.worker = engine;
}
- void AppendText(string text)
+ void AppendLine(string text)
{
worker.OutputText(text);
}
@@ -362,7 +373,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
activeTaskName = e.TaskName;
if (MSBuildEngine.CompileTaskNames.Contains(e.TaskName.ToLowerInvariant())) {
- AppendText("${res:MainWindow.CompilerMessages.CompileVerb} " + Path.GetFileNameWithoutExtension(e.ProjectFile));
+ AppendLine(StringParser.Parse("${res:MainWindow.CompilerMessages.CompileVerb} " + Path.GetFileNameWithoutExtension(e.ProjectFile)));
}
}
diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/SDConsoleLogger.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/SDConsoleLogger.cs
new file mode 100644
index 0000000000..2f29ee2580
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/SDConsoleLogger.cs
@@ -0,0 +1,53 @@
+//
+//
+//
+//
+// $Revision: 5529 $
+//
+
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Text;
+
+using Microsoft.Build.Framework;
+using Microsoft.Build.Logging;
+
+namespace ICSharpCode.SharpDevelop.Project
+{
+ sealed class SDConsoleLogger : ConsoleLogger
+ {
+ IBuildFeedbackSink feedbackSink;
+
+ public SDConsoleLogger(IBuildFeedbackSink feedbackSink, LoggerVerbosity verbosity)
+ : base(verbosity)
+ {
+ if (feedbackSink == null)
+ throw new ArgumentNullException("feedbackSink");
+ this.feedbackSink = feedbackSink;
+ this.ShowSummary = false;
+ base.WriteHandler = Write;
+ }
+
+ StringBuilder buffer = new StringBuilder();
+
+ void Write(string text)
+ {
+ // ReportMessage takes full lines, so we have to put stuff into a buffer until we get a whole line
+ int sendUpTo = text.LastIndexOf('\n');
+ int oldBufferLength = buffer.Length;
+ buffer.Append(text);
+ if (sendUpTo >= 0) {
+ sendUpTo += oldBufferLength;
+ Debug.Assert(buffer[sendUpTo] == '\n');
+ int terminatorLength = 1;
+ if (sendUpTo > 0 && buffer[sendUpTo - 1] == '\r') {
+ sendUpTo--;
+ terminatorLength++;
+ }
+ feedbackSink.ReportMessage(buffer.ToString(0, sendUpTo));
+ buffer.Remove(0, sendUpTo + terminatorLength);
+ }
+ }
+ }
+}
diff --git a/src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml b/src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml
index 7592e21280..e4e2573395 100644
--- a/src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml
+++ b/src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml
@@ -2,6 +2,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ICSharpCode.Core.Presentation"
>
+
+
+
+