From 5ced936963739d2846d0948419c45ea0ff9fc452 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Thu, 5 Jun 2014 15:12:27 -0400 Subject: [PATCH] Added HostApplicationMessage to display asynchronous errors, warnings, and messages as document is loaded --- .../HostApplication.cs | 8 +- .../HostApplicationMessage.cs | 138 ++++++++++++++++++ 2 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 CSharp/Libraries/UniversalEditor.UserInterface/HostApplicationMessage.cs diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/HostApplication.cs b/CSharp/Libraries/UniversalEditor.UserInterface/HostApplication.cs index 324f4971..cb3f6c10 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/HostApplication.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/HostApplication.cs @@ -10,8 +10,10 @@ namespace UniversalEditor.UserInterface private static IHostApplicationWindow mvarCurrentWindow = null; public static IHostApplicationWindow CurrentWindow { get { return mvarCurrentWindow; } set { mvarCurrentWindow = value; } } - private static HostApplicationOutputWindow mvarOutputWindow = new HostApplicationOutputWindow(); - public static HostApplicationOutputWindow OutputWindow { get { return mvarOutputWindow; } set { mvarOutputWindow = value; } } + private static HostApplicationOutputWindow mvarOutputWindow = new HostApplicationOutputWindow(); + public static HostApplicationOutputWindow OutputWindow { get { return mvarOutputWindow; } set { mvarOutputWindow = value; } } - } + private static HostApplicationMessage.HostApplicationMessageCollection mvarMessages = new HostApplicationMessage.HostApplicationMessageCollection(); + public static HostApplicationMessage.HostApplicationMessageCollection Messages { get { return mvarMessages; } } + } } diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/HostApplicationMessage.cs b/CSharp/Libraries/UniversalEditor.UserInterface/HostApplicationMessage.cs new file mode 100644 index 00000000..ec9ad765 --- /dev/null +++ b/CSharp/Libraries/UniversalEditor.UserInterface/HostApplicationMessage.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace UniversalEditor.UserInterface +{ + public enum HostApplicationMessageSeverity + { + None = 0, + Notice = 1, + Warning = 2, + Error = 3 + } + public delegate void HostApplicationMessageModifyingEventHandler(object sender, HostApplicationMessageModifyingEventArgs e); + public class HostApplicationMessageModifyingEventArgs + : CancelEventArgs + { + public HostApplicationMessageModifyingEventArgs(HostApplicationMessage message) + { + mvarMessage = message; + } + + private HostApplicationMessage mvarMessage = null; + public HostApplicationMessage Message { get { return mvarMessage; } } + } + public delegate void HostApplicationMessageModifiedEventHandler(object sender, HostApplicationMessageModifiedEventArgs e); + public class HostApplicationMessageModifiedEventArgs + : EventArgs + { + public HostApplicationMessageModifiedEventArgs(HostApplicationMessage message) + { + mvarMessage = message; + } + + private HostApplicationMessage mvarMessage = null; + public HostApplicationMessage Message { get { return mvarMessage; } } + } + + public class HostApplicationMessage + { + public class HostApplicationMessageCollection + : System.Collections.ObjectModel.Collection + { + public event HostApplicationMessageModifyingEventHandler MessageAdding; + public event HostApplicationMessageModifyingEventHandler MessageRemoving; + + public event HostApplicationMessageModifiedEventHandler MessageAdded; + public event HostApplicationMessageModifiedEventHandler MessageRemoved; + + public HostApplicationMessage Add(HostApplicationMessageSeverity severity, string description, string fileName = null, int? lineNumber = null, int? columnNumber = null, string projectName = null) + { + HostApplicationMessage message = new HostApplicationMessage(); + message.Severity = severity; + message.Description = description; + message.FileName = fileName; + message.LineNumber = lineNumber; + message.ColumnNumber = columnNumber; + message.ProjectName = projectName; + Add(message); + return message; + } + + protected virtual void OnMessageAdding(HostApplicationMessageModifyingEventArgs e) + { + if (MessageAdding != null) + { + MessageAdding(this, e); + } + } + protected virtual void OnMessageAdded(HostApplicationMessageModifiedEventArgs e) + { + if (MessageAdded != null) + { + MessageAdded(this, e); + } + } + + protected virtual void OnMessageRemoving(HostApplicationMessageModifyingEventArgs e) + { + if (MessageRemoving != null) + { + MessageRemoving(this, e); + } + } + protected virtual void OnMessageRemoved(HostApplicationMessageModifiedEventArgs e) + { + if (MessageRemoved != null) + { + MessageRemoved(this, e); + } + } + + protected override void InsertItem(int index, HostApplicationMessage item) + { + HostApplicationMessage message = item; + HostApplicationMessageModifyingEventArgs e = new HostApplicationMessageModifyingEventArgs(message); + OnMessageAdding(e); + if (e.Cancel) return; + + base.InsertItem(index, item); + + OnMessageAdded(new HostApplicationMessageModifiedEventArgs(message)); + } + protected override void RemoveItem(int index) + { + HostApplicationMessage message = this[index]; + HostApplicationMessageModifyingEventArgs e = new HostApplicationMessageModifyingEventArgs(message); + OnMessageRemoving(e); + if (e.Cancel) return; + + base.RemoveItem(index); + + OnMessageRemoved(new HostApplicationMessageModifiedEventArgs(message)); + } + } + + private HostApplicationMessageSeverity mvarSeverity = HostApplicationMessageSeverity.None; + public HostApplicationMessageSeverity Severity { get { return mvarSeverity; } set { mvarSeverity = value; } } + + private string mvarDescription = String.Empty; + public string Description { get { return mvarDescription; } set { mvarDescription = value; } } + + private string mvarFileName = null; + public string FileName { get { return mvarFileName; } set { mvarFileName = value; } } + + private int? mvarLineNumber = null; + public int? LineNumber { get { return mvarLineNumber; } set { mvarLineNumber = value; } } + + private int? mvarColumnNumber = null; + public int? ColumnNumber { get { return mvarColumnNumber; } set { mvarColumnNumber = value; } } + + private string mvarProjectName = null; + public string ProjectName { get { return mvarProjectName; } set { mvarProjectName = value; } } + + } +}