diff --git a/VAR.Toolbox/Code/EventDispatcher.cs b/VAR.Toolbox/Code/EventDispatcher.cs new file mode 100644 index 0000000..b3b0c31 --- /dev/null +++ b/VAR.Toolbox/Code/EventDispatcher.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; + +namespace VAR.Toolbox.Code +{ + public static class EventDispatcher + { + private static List _eventListeners = null; + + private static IEnumerable GetEventListeners() + { + if (_eventListeners != null) + { + return _eventListeners; + } + + Type iEventListener = typeof(IEventListener); + IEnumerable eventListeners = ReflectionUtils.GetTypesOfInterface(iEventListener); + _eventListeners = new List(); + foreach (Type eventListener in eventListeners) + { + IEventListener eventListenerInstance = Activator.CreateInstance(eventListener) as IEventListener; + if (eventListenerInstance != null) + { + _eventListeners.Add(eventListenerInstance); + } + } + + return _eventListeners; + } + + public static void EmitEvent(string eventName, object eventData) + { + IEnumerable eventListeners = GetEventListeners(); + foreach (IEventListener eventListener in eventListeners) + { + eventListener.ProcessEvent(eventName, eventData); + } + } + + } +} diff --git a/VAR.Toolbox/Code/IEventListener.cs b/VAR.Toolbox/Code/IEventListener.cs new file mode 100644 index 0000000..f8452b1 --- /dev/null +++ b/VAR.Toolbox/Code/IEventListener.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VAR.Toolbox.Code +{ + public interface IEventListener + { + void ProcessEvent(string eventName, object eventData); + } +} diff --git a/VAR.Toolbox/UI/Tools/FrmCover.cs b/VAR.Toolbox/UI/Tools/FrmCover.cs index 11fc906..e6c5fce 100644 --- a/VAR.Toolbox/UI/Tools/FrmCover.cs +++ b/VAR.Toolbox/UI/Tools/FrmCover.cs @@ -67,6 +67,7 @@ namespace VAR.Toolbox.UI Mouse.SetPosition(_mouseX, _mouseY); Close(); + EventDispatcher.EmitEvent(PnlCover.PostCoverEventName, null); } private void FrmCover_KeyPress(object sender, KeyPressEventArgs e) @@ -77,6 +78,7 @@ namespace VAR.Toolbox.UI Mouse.SetPosition(_mouseX, _mouseY); Close(); + EventDispatcher.EmitEvent(PnlCover.PostCoverEventName, null); } private void Timer_Tick(object sender, EventArgs e) diff --git a/VAR.Toolbox/UI/Tools/PnlCover.cs b/VAR.Toolbox/UI/Tools/PnlCover.cs index b24b754..a77a6c5 100644 --- a/VAR.Toolbox/UI/Tools/PnlCover.cs +++ b/VAR.Toolbox/UI/Tools/PnlCover.cs @@ -1,11 +1,15 @@ using System; using System.Windows.Forms; +using VAR.Toolbox.Code; using VAR.Toolbox.Code.Windows; namespace VAR.Toolbox.UI { public partial class PnlCover : UserControl, IToolPanel { + public const string PreCoverEventName = "PreCover"; + public const string PostCoverEventName = "PostCover"; + public PnlCover() { InitializeComponent(); @@ -39,6 +43,9 @@ namespace VAR.Toolbox.UI private void CoverScreen() { if (DesignMode) { return; } + + EventDispatcher.EmitEvent(PreCoverEventName, null); + if (_frmCover != null) { _frmCover.Show(); diff --git a/VAR.Toolbox/UI/Tools/PnlSuspension.cs b/VAR.Toolbox/UI/Tools/PnlSuspension.cs index 3d6f23b..9c4c389 100644 --- a/VAR.Toolbox/UI/Tools/PnlSuspension.cs +++ b/VAR.Toolbox/UI/Tools/PnlSuspension.cs @@ -1,11 +1,14 @@ using System; using System.Windows.Forms; +using VAR.Toolbox.Code; using VAR.Toolbox.Code.Windows; namespace VAR.Toolbox.UI { public partial class PnlSuspension : UserControl, IToolPanel { + public const string PreSuspendEventName = "PreSuspend"; + private readonly Random _rnd = new Random(); public PnlSuspension() @@ -118,6 +121,7 @@ namespace VAR.Toolbox.UI private void SuspendSystem() { + EventDispatcher.EmitEvent(PreSuspendEventName, null); Win32.SetSuspendState(false, true, false); } } diff --git a/VAR.Toolbox/VAR.Toolbox.csproj b/VAR.Toolbox/VAR.Toolbox.csproj index 5cb326b..aca334a 100644 --- a/VAR.Toolbox/VAR.Toolbox.csproj +++ b/VAR.Toolbox/VAR.Toolbox.csproj @@ -73,7 +73,9 @@ Code\Json\ParserContext.cs + +