diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index e6a030e..4f540ae 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -114,6 +114,8 @@ + + @@ -145,41 +147,41 @@ - + - - - + + + - - - + + + - + Form - + MainForm.cs - - + + - + Form - + ThumbnailOverlay.cs - + Designer MainForm.cs - + ThumbnailOverlay.cs @@ -187,7 +189,7 @@ Resources.Designer.cs Designer - + Designer ThumbnailView.cs @@ -196,10 +198,10 @@ Resources.resx True - + Form - + ThumbnailView.cs diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs new file mode 100644 index 0000000..5a57cd8 --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Mediator.Messages; +using EveOPreview.Presenters; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Thumbnails +{ + sealed class ThumbnailListUpdatedHandler : INotificationHandler + { + #region Private fields + private readonly IMainFormPresenter _presenter; + #endregion + + public ThumbnailListUpdatedHandler(MainFormPresenter presenter) + { + this._presenter = presenter; + } + + public Task Handle(ThumbnailListUpdated notification, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + } +} diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailListUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailListUpdated.cs new file mode 100644 index 0000000..25fa269 --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailListUpdated.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailListUpdated : NotificationBase> + { + public ThumbnailListUpdated(UpdateKind updateKind, IList list) + : base(list) + { + this.Kind = updateKind; + } + + public UpdateKind Kind { get; } + + public enum UpdateKind + { + Add, + Update, + Remove + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Presenters/IThumbnailManager.cs b/Eve-O-Preview/Presenters/IThumbnailManager.cs index 1333f33..ea8c249 100644 --- a/Eve-O-Preview/Presenters/IThumbnailManager.cs +++ b/Eve-O-Preview/Presenters/IThumbnailManager.cs @@ -12,9 +12,5 @@ namespace EveOPreview.UI void SetThumbnailState(IntPtr thumbnailId, bool hideAlways); void SetThumbnailsSize(Size size); void SetupThumbnailFrames(); - - Action> ThumbnailsAdded { get; set; } - Action> ThumbnailsUpdated { get; set; } - Action> ThumbnailsRemoved { get; set; } } } \ No newline at end of file diff --git a/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs index 867b1cf..c6371c0 100644 --- a/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs +++ b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs @@ -5,6 +5,7 @@ using System.Drawing; using EveOPreview.Configuration; using EveOPreview.Mediator.Messages; using EveOPreview.UI; +using EveOPreview.View; using MediatR; namespace EveOPreview.Presenters @@ -48,10 +49,6 @@ namespace EveOPreview.Presenters this.View.ThumbnailStateChanged = this.UpdateThumbnailState; this.View.DocumentationLinkActivated = this.OpenDocumentationLink; this.View.ApplicationExitRequested = this.ExitApplication; - - this._thumbnailManager.ThumbnailsAdded = this.ThumbnailsAdded; - this._thumbnailManager.ThumbnailsUpdated = this.ThumbnailsUpdated; - this._thumbnailManager.ThumbnailsRemoved = this.ThumbnailsRemoved; } private void Activate() diff --git a/Eve-O-Preview/Presenters/ThumbnailManager.cs b/Eve-O-Preview/Presenters/ThumbnailManager.cs index 881c651..99f04c0 100644 --- a/Eve-O-Preview/Presenters/ThumbnailManager.cs +++ b/Eve-O-Preview/Presenters/ThumbnailManager.cs @@ -5,6 +5,7 @@ using System.Windows.Threading; using EveOPreview.Configuration; using EveOPreview.Mediator.Messages; using EveOPreview.Services; +using EveOPreview.View; using MediatR; namespace EveOPreview.UI @@ -56,12 +57,6 @@ namespace EveOPreview.UI this._thumbnailUpdateTimer.Interval = new TimeSpan(0, 0, 0, 0, configuration.ThumbnailRefreshPeriod); } - public Action> ThumbnailsAdded { get; set; } - - public Action> ThumbnailsUpdated { get; set; } - - public Action> ThumbnailsRemoved { get; set; } - public void Activate() { this._thumbnailUpdateTimer.Start(); @@ -85,7 +80,7 @@ namespace EveOPreview.UI thumbnail.IsEnabled = !hideAlways; } - public void SetThumbnailsSize(Size size) + public async void SetThumbnailsSize(Size size) { this.DisableViewEvents(); @@ -95,7 +90,7 @@ namespace EveOPreview.UI entry.Value.Refresh(false); } - this._mediator.Publish(new ThumbnailSizeUpdated(size)); // This one runs asynchronously + await this._mediator.Publish(new ThumbnailSizeUpdated(size)); this.EnableViewEvents(); } @@ -189,15 +184,15 @@ namespace EveOPreview.UI this._ignoreViewEvents = true; } - private void UpdateThumbnailsList() + private async void UpdateThumbnailsList() { this._processMonitor.GetUpdatedProcesses(out ICollection addedProcesses, out ICollection updatedProcesses, out ICollection removedProcesses); IntPtr foregroundWindowHandle = this._windowManager.GetForegroundWindowHandle(); - List viewsAdded = new List(); - List viewsUpdated = new List(); - List viewsRemoved = new List(); + List viewsAdded = new List(); + List viewsUpdated = new List(); + List viewsRemoved = new List(); foreach (IProcessInfo process in addedProcesses) { @@ -211,10 +206,10 @@ namespace EveOPreview.UI view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop); view.ThumbnailLocation = this.IsManageableThumbnail(view) - ? this._configuration.GetThumbnailLocation(process.Title, this._activeClientTitle, view.ThumbnailLocation) + ? this._configuration.GetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation) : this._configuration.GetDefaultThumbnailLocation(); - this._thumbnailViews.Add(process.Handle, view); + this._thumbnailViews.Add(view.Id, view); view.ThumbnailResized = this.ThumbnailViewResized; view.ThumbnailMoved = this.ThumbnailViewMoved; @@ -223,16 +218,20 @@ namespace EveOPreview.UI view.ThumbnailActivated = this.ThumbnailActivated; view.ThumbnailDeactivated = this.ThumbnailDeactivated; - view.RegisterHotkey(this._configuration.GetClientHotkey(process.Title)); + view.RegisterHotkey(this._configuration.GetClientHotkey(view.Title)); - this.ApplyClientLayout(process.Handle, process.Title); + this.ApplyClientLayout(view.Id, view.Title); - viewsAdded.Add(view); + // TODO Add extension filter here later + if (view.Title != ThumbnailManager.DefaultClientTitle) + { + viewsAdded.Add(view.Title); + } if (process.Handle == foregroundWindowHandle) { - this._activeClientHandle = process.Handle; - this._activeClientTitle = process.Title; + this._activeClientHandle = view.Id; + this._activeClientTitle = view.Title; } } @@ -251,8 +250,12 @@ namespace EveOPreview.UI view.Title = process.Title; view.RegisterHotkey(this._configuration.GetClientHotkey(process.Title)); - this.ApplyClientLayout(process.Handle, process.Title); - viewsUpdated.Add(view); + this.ApplyClientLayout(view.Id, view.Title); + + if (view.Title != ThumbnailManager.DefaultClientTitle) + { + viewsUpdated.Add(view.Title); + } } if (process.Handle == foregroundWindowHandle) @@ -266,7 +269,7 @@ namespace EveOPreview.UI { IThumbnailView view = this._thumbnailViews[process.Handle]; - this._thumbnailViews.Remove(process.Handle); + this._thumbnailViews.Remove(view.Id); view.UnregisterHotkey(); @@ -278,12 +281,26 @@ namespace EveOPreview.UI view.Close(); - viewsRemoved.Add(view); + if (view.Title != ThumbnailManager.DefaultClientTitle) + { + viewsRemoved.Add(view.Title); + } } - this.ThumbnailsAdded?.Invoke(viewsAdded); - this.ThumbnailsUpdated?.Invoke(viewsUpdated); - this.ThumbnailsRemoved?.Invoke(viewsRemoved); + if (viewsAdded.Count > 0) + { + await this._mediator.Publish(new ThumbnailListUpdated(ThumbnailListUpdated.UpdateKind.Add, viewsAdded)); + } + + if (viewsUpdated.Count > 0) + { + await this._mediator.Publish(new ThumbnailListUpdated(ThumbnailListUpdated.UpdateKind.Update, viewsUpdated)); + } + + if (viewsRemoved.Count > 0) + { + await this._mediator.Publish(new ThumbnailListUpdated(ThumbnailListUpdated.UpdateKind.Remove, viewsRemoved)); + } } private void ThumbnailViewFocused(IntPtr id) diff --git a/Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs b/Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs index 04027cc..650e30e 100644 --- a/Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs +++ b/Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs @@ -1,4 +1,5 @@ using EveOPreview.Configuration; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/Program.cs b/Eve-O-Preview/Program.cs index dd793ba..3354fc6 100644 --- a/Eve-O-Preview/Program.cs +++ b/Eve-O-Preview/Program.cs @@ -5,6 +5,7 @@ using EveOPreview.Configuration; using EveOPreview.Presenters; using EveOPreview.Services; using EveOPreview.UI; +using EveOPreview.View; using MediatR; namespace EveOPreview diff --git a/Eve-O-Preview/UI/Factory/ThumbnailDescriptionViewFactory.cs b/Eve-O-Preview/View/Factory/ThumbnailDescriptionViewFactory.cs similarity index 92% rename from Eve-O-Preview/UI/Factory/ThumbnailDescriptionViewFactory.cs rename to Eve-O-Preview/View/Factory/ThumbnailDescriptionViewFactory.cs index 1fc7cf2..d4992d3 100644 --- a/Eve-O-Preview/UI/Factory/ThumbnailDescriptionViewFactory.cs +++ b/Eve-O-Preview/View/Factory/ThumbnailDescriptionViewFactory.cs @@ -1,4 +1,5 @@ using System; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/UI/Factory/ThumbnailViewFactory.cs b/Eve-O-Preview/View/Factory/ThumbnailViewFactory.cs similarity index 91% rename from Eve-O-Preview/UI/Factory/ThumbnailViewFactory.cs rename to Eve-O-Preview/View/Factory/ThumbnailViewFactory.cs index 986e3d2..8391509 100644 --- a/Eve-O-Preview/UI/Factory/ThumbnailViewFactory.cs +++ b/Eve-O-Preview/View/Factory/ThumbnailViewFactory.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/UI/Implementation/MainForm.Designer.cs b/Eve-O-Preview/View/Implementation/MainForm.Designer.cs similarity index 97% rename from Eve-O-Preview/UI/Implementation/MainForm.Designer.cs rename to Eve-O-Preview/View/Implementation/MainForm.Designer.cs index 50698c1..8222e02 100644 --- a/Eve-O-Preview/UI/Implementation/MainForm.Designer.cs +++ b/Eve-O-Preview/View/Implementation/MainForm.Designer.cs @@ -1,6 +1,6 @@ using System.Windows.Forms; -namespace EveOPreview.UI +namespace EveOPreview.View { partial class MainForm { diff --git a/Eve-O-Preview/UI/Implementation/MainForm.cs b/Eve-O-Preview/View/Implementation/MainForm.cs similarity index 95% rename from Eve-O-Preview/UI/Implementation/MainForm.cs rename to Eve-O-Preview/View/Implementation/MainForm.cs index c2759ef..f80e2f3 100644 --- a/Eve-O-Preview/UI/Implementation/MainForm.cs +++ b/Eve-O-Preview/View/Implementation/MainForm.cs @@ -2,8 +2,9 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; +using EveOPreview.UI; -namespace EveOPreview.UI +namespace EveOPreview.View { public partial class MainForm : Form, IMainFormView { diff --git a/Eve-O-Preview/UI/Implementation/MainForm.resx b/Eve-O-Preview/View/Implementation/MainForm.resx similarity index 100% rename from Eve-O-Preview/UI/Implementation/MainForm.resx rename to Eve-O-Preview/View/Implementation/MainForm.resx diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailDescriptionView.cs b/Eve-O-Preview/View/Implementation/ThumbnailDescriptionView.cs similarity index 79% rename from Eve-O-Preview/UI/Implementation/ThumbnailDescriptionView.cs rename to Eve-O-Preview/View/Implementation/ThumbnailDescriptionView.cs index ee49d55..a34e443 100644 --- a/Eve-O-Preview/UI/Implementation/ThumbnailDescriptionView.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailDescriptionView.cs @@ -1,6 +1,7 @@ using System; +using EveOPreview.UI; -namespace EveOPreview.UI +namespace EveOPreview.View { public class ThumbnailDescriptionView : IThumbnailDescriptionView { diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailOverlay.Designer.cs b/Eve-O-Preview/View/Implementation/ThumbnailOverlay.Designer.cs similarity index 100% rename from Eve-O-Preview/UI/Implementation/ThumbnailOverlay.Designer.cs rename to Eve-O-Preview/View/Implementation/ThumbnailOverlay.Designer.cs diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailOverlay.cs b/Eve-O-Preview/View/Implementation/ThumbnailOverlay.cs similarity index 100% rename from Eve-O-Preview/UI/Implementation/ThumbnailOverlay.cs rename to Eve-O-Preview/View/Implementation/ThumbnailOverlay.cs diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailOverlay.resx b/Eve-O-Preview/View/Implementation/ThumbnailOverlay.resx similarity index 100% rename from Eve-O-Preview/UI/Implementation/ThumbnailOverlay.resx rename to Eve-O-Preview/View/Implementation/ThumbnailOverlay.resx diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailView.Designer.cs b/Eve-O-Preview/View/Implementation/ThumbnailView.Designer.cs similarity index 100% rename from Eve-O-Preview/UI/Implementation/ThumbnailView.Designer.cs rename to Eve-O-Preview/View/Implementation/ThumbnailView.Designer.cs diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailView.cs b/Eve-O-Preview/View/Implementation/ThumbnailView.cs similarity index 96% rename from Eve-O-Preview/UI/Implementation/ThumbnailView.cs rename to Eve-O-Preview/View/Implementation/ThumbnailView.cs index 49d1dbb..4c70486 100644 --- a/Eve-O-Preview/UI/Implementation/ThumbnailView.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailView.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Windows.Forms; using EveOPreview.Services; using EveOPreview.UI.Hotkeys; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/UI/Implementation/ThumbnailView.resx b/Eve-O-Preview/View/Implementation/ThumbnailView.resx similarity index 100% rename from Eve-O-Preview/UI/Implementation/ThumbnailView.resx rename to Eve-O-Preview/View/Implementation/ThumbnailView.resx diff --git a/Eve-O-Preview/UI/Interface/IMainFormView.cs b/Eve-O-Preview/View/Interface/IMainFormView.cs similarity index 94% rename from Eve-O-Preview/UI/Interface/IMainFormView.cs rename to Eve-O-Preview/View/Interface/IMainFormView.cs index 4af3b92..149d79c 100644 --- a/Eve-O-Preview/UI/Interface/IMainFormView.cs +++ b/Eve-O-Preview/View/Interface/IMainFormView.cs @@ -1,8 +1,9 @@ using System; using System.Collections.Generic; using System.Drawing; +using EveOPreview.UI; -namespace EveOPreview.UI +namespace EveOPreview.View { /// /// Main view interface diff --git a/Eve-O-Preview/UI/Interface/IThumbnailDescriptionView.cs b/Eve-O-Preview/View/Interface/IThumbnailDescriptionView.cs similarity index 81% rename from Eve-O-Preview/UI/Interface/IThumbnailDescriptionView.cs rename to Eve-O-Preview/View/Interface/IThumbnailDescriptionView.cs index 0cc160e..b8829a8 100644 --- a/Eve-O-Preview/UI/Interface/IThumbnailDescriptionView.cs +++ b/Eve-O-Preview/View/Interface/IThumbnailDescriptionView.cs @@ -1,6 +1,6 @@ using System; -namespace EveOPreview.UI +namespace EveOPreview.View { public interface IThumbnailDescriptionView : IView { diff --git a/Eve-O-Preview/UI/Interface/IThumbnailDescriptionViewFactory.cs b/Eve-O-Preview/View/Interface/IThumbnailDescriptionViewFactory.cs similarity index 84% rename from Eve-O-Preview/UI/Interface/IThumbnailDescriptionViewFactory.cs rename to Eve-O-Preview/View/Interface/IThumbnailDescriptionViewFactory.cs index 49da0e4..d2747a4 100644 --- a/Eve-O-Preview/UI/Interface/IThumbnailDescriptionViewFactory.cs +++ b/Eve-O-Preview/View/Interface/IThumbnailDescriptionViewFactory.cs @@ -1,4 +1,5 @@ using System; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/UI/Interface/IThumbnailView.cs b/Eve-O-Preview/View/Interface/IThumbnailView.cs similarity index 94% rename from Eve-O-Preview/UI/Interface/IThumbnailView.cs rename to Eve-O-Preview/View/Interface/IThumbnailView.cs index 4dc9127..6249c9b 100644 --- a/Eve-O-Preview/UI/Interface/IThumbnailView.cs +++ b/Eve-O-Preview/View/Interface/IThumbnailView.cs @@ -2,7 +2,7 @@ using System.Drawing; using System.Windows.Forms; -namespace EveOPreview.UI +namespace EveOPreview.View { public interface IThumbnailView : IView { diff --git a/Eve-O-Preview/UI/Interface/IThumbnailViewFactory.cs b/Eve-O-Preview/View/Interface/IThumbnailViewFactory.cs similarity index 83% rename from Eve-O-Preview/UI/Interface/IThumbnailViewFactory.cs rename to Eve-O-Preview/View/Interface/IThumbnailViewFactory.cs index 15e20b4..1f8d39c 100644 --- a/Eve-O-Preview/UI/Interface/IThumbnailViewFactory.cs +++ b/Eve-O-Preview/View/Interface/IThumbnailViewFactory.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using EveOPreview.View; namespace EveOPreview.UI { diff --git a/Eve-O-Preview/UI/Interface/ViewZoomAnchor.cs b/Eve-O-Preview/View/Interface/ViewZoomAnchor.cs similarity index 67% rename from Eve-O-Preview/UI/Interface/ViewZoomAnchor.cs rename to Eve-O-Preview/View/Interface/ViewZoomAnchor.cs index f927329..564b134 100644 --- a/Eve-O-Preview/UI/Interface/ViewZoomAnchor.cs +++ b/Eve-O-Preview/View/Interface/ViewZoomAnchor.cs @@ -1,4 +1,4 @@ -namespace EveOPreview.UI +namespace EveOPreview.View { public enum ViewZoomAnchor {