diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index 5a9c4bd..e6a030e 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -113,10 +113,18 @@ - - - - + + + + + + + + + + + + @@ -134,14 +142,14 @@ - - - + + + - + - + @@ -158,7 +166,7 @@ - + Form diff --git a/Eve-O-Preview/Mediator/Handlers/Configuration/SaveConfigurationHandler.cs b/Eve-O-Preview/Mediator/Handlers/Configuration/SaveConfigurationHandler.cs new file mode 100644 index 0000000..c870f7a --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Configuration/SaveConfigurationHandler.cs @@ -0,0 +1,25 @@ +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Configuration; +using EveOPreview.Mediator.Messages; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Configuration +{ + sealed class SaveConfigurationHandler : IRequestHandler + { + private readonly IConfigurationStorage _storage; + + public SaveConfigurationHandler(IConfigurationStorage storage) + { + this._storage = storage; + } + + public Task Handle(SaveConfiguration message, CancellationToken cancellationToken) + { + this._storage.Save(); + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediatr/Handlers/Services/StartServicesHandler.cs b/Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs similarity index 51% rename from Eve-O-Preview/Mediatr/Handlers/Services/StartServicesHandler.cs rename to Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs index 5520c3e..180668b 100644 --- a/Eve-O-Preview/Mediatr/Handlers/Services/StartServicesHandler.cs +++ b/Eve-O-Preview/Mediator/Handlers/Services/StartServiceHandler.cs @@ -4,18 +4,18 @@ using EveOPreview.Mediator.Messages; using EveOPreview.UI; using MediatR; -namespace EveOPreview.Mediator.Handlers +namespace EveOPreview.Mediator.Handlers.Services { - sealed class StartServicesHandler : INotificationHandler + sealed class StartServiceHandler : IRequestHandler { private readonly IThumbnailManager _manager; - public StartServicesHandler(IThumbnailManager manager) + public StartServiceHandler(IThumbnailManager manager) { this._manager = manager; } - public Task Handle(StartServices message, CancellationToken cancellationToken) + public Task Handle(StartService message, CancellationToken cancellationToken) { this._manager.Activate(); diff --git a/Eve-O-Preview/Mediatr/Handlers/Services/StopServicesHandler.cs b/Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs similarity index 52% rename from Eve-O-Preview/Mediatr/Handlers/Services/StopServicesHandler.cs rename to Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs index 220c4ae..75143d8 100644 --- a/Eve-O-Preview/Mediatr/Handlers/Services/StopServicesHandler.cs +++ b/Eve-O-Preview/Mediator/Handlers/Services/StopServiceHandler.cs @@ -4,18 +4,18 @@ using EveOPreview.Mediator.Messages; using EveOPreview.UI; using MediatR; -namespace EveOPreview.Mediator.Handlers +namespace EveOPreview.Mediator.Handlers.Services { - sealed class StopServicesHandler : INotificationHandler + sealed class StopServiceHandler : IRequestHandler { private readonly IThumbnailManager _manager; - public StopServicesHandler(IThumbnailManager manager) + public StopServiceHandler(IThumbnailManager manager) { this._manager = manager; } - public Task Handle(StopServices message, CancellationToken cancellationToken) + public Task Handle(StopService message, CancellationToken cancellationToken) { this._manager.Deactivate(); diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailLocationUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailLocationUpdatedHandler.cs new file mode 100644 index 0000000..397d4f1 --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailLocationUpdatedHandler.cs @@ -0,0 +1,27 @@ +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Configuration; +using EveOPreview.Mediator.Messages; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Thumbnails +{ + sealed class ThumbnailLocationUpdatedHandler : INotificationHandler + { + private readonly IMediator _mediator; + private readonly IThumbnailConfiguration _configuration; + + public ThumbnailLocationUpdatedHandler(IMediator mediator, IThumbnailConfiguration configuration) + { + this._mediator = mediator; + this._configuration = configuration; + } + + public Task Handle(ThumbnailLocationUpdated notification, CancellationToken cancellationToken) + { + this._configuration.SetThumbnailLocation(notification.ThumbnailName, notification.ActiveClientName, notification.Location); + + return this._mediator.Send(new SaveConfiguration(), cancellationToken); + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs new file mode 100644 index 0000000..ac284eb --- /dev/null +++ b/Eve-O-Preview/Mediator/Handlers/Thumbnails/ThumbnailSizeUpdatedHandler.cs @@ -0,0 +1,25 @@ +using System.Threading; +using System.Threading.Tasks; +using EveOPreview.Mediator.Messages; +using EveOPreview.Presenters; +using MediatR; + +namespace EveOPreview.Mediator.Handlers.Thumbnails +{ + sealed class ThumbnailSizeUpdatedHandler : INotificationHandler + { + private readonly IMainFormPresenter _presenter; + + public ThumbnailSizeUpdatedHandler(MainFormPresenter presenter) + { + this._presenter = presenter; + } + + public Task Handle(ThumbnailSizeUpdated notification, CancellationToken cancellationToken) + { + this._presenter.UpdateThumbnailSize(notification.Value); + + return Task.CompletedTask; + } + } +} diff --git a/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs b/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs new file mode 100644 index 0000000..4baaa25 --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Base/NotificationBase.cs @@ -0,0 +1,14 @@ +using MediatR; + +namespace EveOPreview.Mediator.Messages +{ + abstract class NotificationBase : INotification + { + protected NotificationBase(TValue value) + { + this.Value = value; + } + + public TValue Value { get; } + } +} diff --git a/Eve-O-Preview/Mediatr/Messages/Services/StopServices.cs b/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs similarity index 57% rename from Eve-O-Preview/Mediatr/Messages/Services/StopServices.cs rename to Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs index dc8580d..53e643e 100644 --- a/Eve-O-Preview/Mediatr/Messages/Services/StopServices.cs +++ b/Eve-O-Preview/Mediator/Messages/Configuration/SaveConfiguration.cs @@ -2,7 +2,7 @@ namespace EveOPreview.Mediator.Messages { - sealed class StopServices : INotification + sealed class SaveConfiguration : IRequest { } } diff --git a/Eve-O-Preview/Mediatr/Messages/Services/StartServices.cs b/Eve-O-Preview/Mediator/Messages/Services/StartService.cs similarity index 57% rename from Eve-O-Preview/Mediatr/Messages/Services/StartServices.cs rename to Eve-O-Preview/Mediator/Messages/Services/StartService.cs index 98efdd5..6c3beca 100644 --- a/Eve-O-Preview/Mediatr/Messages/Services/StartServices.cs +++ b/Eve-O-Preview/Mediator/Messages/Services/StartService.cs @@ -2,7 +2,7 @@ namespace EveOPreview.Mediator.Messages { - sealed class StartServices : INotification + sealed class StartService : IRequest { } } \ No newline at end of file diff --git a/Eve-O-Preview/Mediator/Messages/Services/StopService.cs b/Eve-O-Preview/Mediator/Messages/Services/StopService.cs new file mode 100644 index 0000000..0c77f1b --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Services/StopService.cs @@ -0,0 +1,8 @@ +using MediatR; + +namespace EveOPreview.Mediator.Messages +{ + sealed class StopService : IRequest + { + } +} diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs new file mode 100644 index 0000000..ac5918f --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs @@ -0,0 +1,21 @@ +using System.Drawing; +using MediatR; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailLocationUpdated : INotification + { + public ThumbnailLocationUpdated(string thumbnailName, string activeClientName, Point location) + { + this.ThumbnailName = thumbnailName; + this.ActiveClientName = activeClientName; + this.Location = location; + } + + public string ThumbnailName { get; } + + public string ActiveClientName { get; } + + public Point Location { get; } + } +} diff --git a/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs new file mode 100644 index 0000000..7ae7b6b --- /dev/null +++ b/Eve-O-Preview/Mediator/Messages/Thumbnails/ThumbnailSizeUpdated.cs @@ -0,0 +1,12 @@ +using System.Drawing; + +namespace EveOPreview.Mediator.Messages +{ + sealed class ThumbnailSizeUpdated : NotificationBase + { + public ThumbnailSizeUpdated(Size size) + : base(size) + { + } + } +} diff --git a/Eve-O-Preview/Presentation/IThumbnailManager.cs b/Eve-O-Preview/Presenters/IThumbnailManager.cs similarity index 77% rename from Eve-O-Preview/Presentation/IThumbnailManager.cs rename to Eve-O-Preview/Presenters/IThumbnailManager.cs index 7a513ad..1333f33 100644 --- a/Eve-O-Preview/Presentation/IThumbnailManager.cs +++ b/Eve-O-Preview/Presenters/IThumbnailManager.cs @@ -16,8 +16,5 @@ namespace EveOPreview.UI Action> ThumbnailsAdded { get; set; } Action> ThumbnailsUpdated { get; set; } Action> ThumbnailsRemoved { get; set; } - - Action ThumbnailPositionChanged { get; set; } - Action ThumbnailSizeChanged { get; set; } } } \ No newline at end of file diff --git a/Eve-O-Preview/Presentation/MainPresenter.cs b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs similarity index 87% rename from Eve-O-Preview/Presentation/MainPresenter.cs rename to Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs index ce47f76..867b1cf 100644 --- a/Eve-O-Preview/Presentation/MainPresenter.cs +++ b/Eve-O-Preview/Presenters/Implementation/MainFormPresenter.cs @@ -4,11 +4,12 @@ using System.Diagnostics; using System.Drawing; using EveOPreview.Configuration; using EveOPreview.Mediator.Messages; +using EveOPreview.UI; using MediatR; -namespace EveOPreview.UI +namespace EveOPreview.Presenters { - public class MainPresenter : Presenter + public class MainFormPresenter : Presenter, IMainFormPresenter { #region Private constants private const string ForumUrl = @"https://meta.eveonline.com/t/4202"; @@ -25,7 +26,7 @@ namespace EveOPreview.UI private bool _exitApplication; #endregion - public MainPresenter(IApplicationController controller, IMainView view, IMediator mediator, IThumbnailConfiguration configuration, IConfigurationStorage configurationStorage, + public MainFormPresenter(IApplicationController controller, IMainFormView view, IMediator mediator, IThumbnailConfiguration configuration, IConfigurationStorage configurationStorage, IThumbnailManager thumbnailManager, IThumbnailDescriptionViewFactory thumbnailDescriptionViewFactory) : base(controller, view) { @@ -51,22 +52,19 @@ namespace EveOPreview.UI this._thumbnailManager.ThumbnailsAdded = this.ThumbnailsAdded; this._thumbnailManager.ThumbnailsUpdated = this.ThumbnailsUpdated; this._thumbnailManager.ThumbnailsRemoved = this.ThumbnailsRemoved; - - this._thumbnailManager.ThumbnailPositionChanged = this.ThumbnailPositionChanged; - this._thumbnailManager.ThumbnailSizeChanged = this.ThumbnailSizeChanged; } private void Activate() { this.LoadApplicationSettings(); - this.View.SetDocumentationUrl(MainPresenter.ForumUrl); + this.View.SetDocumentationUrl(MainFormPresenter.ForumUrl); this.View.SetVersionInfo(this.GetApplicationVersion()); if (this._configuration.MinimizeToTray) { this.View.Minimize(); } - this._mediator.Publish(new StartServices()); + this._mediator.Send(new StartService()); } private void Minimize() @@ -83,7 +81,7 @@ namespace EveOPreview.UI { if (this._exitApplication || !this.View.MinimizeToTray) { - this._mediator.Publish(new StopServices()).Wait(); + this._mediator.Send(new StopService()).Wait(); this._thumbnailManager.Deactivate(); this._configurationStorage.Save(); @@ -215,17 +213,6 @@ namespace EveOPreview.UI return thumbnailViews; } - private void ThumbnailPositionChanged(String thumbnailName, String activeClientName, Point location) - { - this._configuration.SetThumbnailLocation(thumbnailName, activeClientName, location); - this._configurationStorage.Save(); - } - - private void ThumbnailSizeChanged(Size size) - { - this.View.ThumbnailSize = size; - } - private void UpdateThumbnailState(IntPtr thumbnailId) { this._thumbnailManager.SetThumbnailState(thumbnailId, this._thumbnailDescriptionViews[thumbnailId].IsDisabled); @@ -233,7 +220,7 @@ namespace EveOPreview.UI private void OpenDocumentationLink() { - ProcessStartInfo processStartInfo = new ProcessStartInfo(new Uri(MainPresenter.ForumUrl).AbsoluteUri); + ProcessStartInfo processStartInfo = new ProcessStartInfo(new Uri(MainFormPresenter.ForumUrl).AbsoluteUri); Process.Start(processStartInfo); } @@ -248,5 +235,10 @@ namespace EveOPreview.UI this._exitApplication = true; this.View.Close(); } + + public void UpdateThumbnailSize(Size size) + { + this.View.ThumbnailSize = size; + } } } \ No newline at end of file diff --git a/Eve-O-Preview/Presenters/Interface/IMainFormPresenter.cs b/Eve-O-Preview/Presenters/Interface/IMainFormPresenter.cs new file mode 100644 index 0000000..cd9f4d6 --- /dev/null +++ b/Eve-O-Preview/Presenters/Interface/IMainFormPresenter.cs @@ -0,0 +1,9 @@ +using System.Drawing; + +namespace EveOPreview.Presenters +{ + interface IMainFormPresenter + { + void UpdateThumbnailSize(Size size); + } +} diff --git a/Eve-O-Preview/Presentation/ThumbnailManager.cs b/Eve-O-Preview/Presenters/ThumbnailManager.cs similarity index 93% rename from Eve-O-Preview/Presentation/ThumbnailManager.cs rename to Eve-O-Preview/Presenters/ThumbnailManager.cs index 96fe3ff..881c651 100644 --- a/Eve-O-Preview/Presentation/ThumbnailManager.cs +++ b/Eve-O-Preview/Presenters/ThumbnailManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Drawing; using System.Windows.Threading; using EveOPreview.Configuration; +using EveOPreview.Mediator.Messages; using EveOPreview.Services; using MediatR; @@ -18,6 +19,7 @@ namespace EveOPreview.UI #endregion #region Private fields + private readonly IMediator _mediator; private readonly IProcessMonitor _processMonitor; private readonly IWindowManager _windowManager; private readonly IThumbnailConfiguration _configuration; @@ -34,6 +36,7 @@ namespace EveOPreview.UI public ThumbnailManager(IMediator mediator, IThumbnailConfiguration configuration, IProcessMonitor processMonitor, IWindowManager windowManager, IThumbnailViewFactory factory) { + this._mediator = mediator; this._processMonitor = processMonitor; this._windowManager = windowManager; this._configuration = configuration; @@ -59,10 +62,6 @@ namespace EveOPreview.UI public Action> ThumbnailsRemoved { get; set; } - public Action ThumbnailPositionChanged { get; set; } - - public Action ThumbnailSizeChanged { get; set; } - public void Activate() { this._thumbnailUpdateTimer.Start(); @@ -96,7 +95,7 @@ namespace EveOPreview.UI entry.Value.Refresh(false); } - this.ThumbnailSizeChanged?.Invoke(size); + this._mediator.Publish(new ThumbnailSizeUpdated(size)); // This one runs asynchronously this.EnableViewEvents(); } @@ -372,7 +371,7 @@ namespace EveOPreview.UI view.Refresh(false); } - private void ThumbnailViewMoved(IntPtr id) + private async void ThumbnailViewMoved(IntPtr id) { if (this._ignoreViewEvents) { @@ -383,7 +382,7 @@ namespace EveOPreview.UI if (this.IsManageableThumbnail(view)) { - this.ThumbnailPositionChanged?.Invoke(view.Title, this._activeClientTitle, view.ThumbnailLocation); + await this._mediator.Publish(new ThumbnailLocationUpdated(view.Title, this._activeClientTitle, view.ThumbnailLocation)); } view.Refresh(false); diff --git a/Eve-O-Preview/Presentation/ViewCloseRequest.cs b/Eve-O-Preview/Presenters/ViewCloseRequest.cs similarity index 100% rename from Eve-O-Preview/Presentation/ViewCloseRequest.cs rename to Eve-O-Preview/Presenters/ViewCloseRequest.cs diff --git a/Eve-O-Preview/Presentation/ViewZoomAnchorConverter.cs b/Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs similarity index 100% rename from Eve-O-Preview/Presentation/ViewZoomAnchorConverter.cs rename to Eve-O-Preview/Presenters/ViewZoomAnchorConverter.cs diff --git a/Eve-O-Preview/Program.cs b/Eve-O-Preview/Program.cs index e891941..dd793ba 100644 --- a/Eve-O-Preview/Program.cs +++ b/Eve-O-Preview/Program.cs @@ -2,6 +2,7 @@ using System; using System.Threading; using System.Windows.Forms; using EveOPreview.Configuration; +using EveOPreview.Presenters; using EveOPreview.Services; using EveOPreview.UI; using MediatR; @@ -34,7 +35,7 @@ namespace EveOPreview IApplicationController controller = Program.InitializeApplicationController(); Program.InitializeWinForms(); - controller.Run(); + controller.Run(); } private static object GetInstanceToken() @@ -97,7 +98,7 @@ namespace EveOPreview IApplicationController controller = new ApplicationController(container); // UI classes - controller.RegisterView() + controller.RegisterView() .RegisterView() .RegisterView() .RegisterInstance(new ApplicationContext()); diff --git a/Eve-O-Preview/UI/Implementation/MainForm.cs b/Eve-O-Preview/UI/Implementation/MainForm.cs index 8494ced..c2759ef 100644 --- a/Eve-O-Preview/UI/Implementation/MainForm.cs +++ b/Eve-O-Preview/UI/Implementation/MainForm.cs @@ -5,7 +5,7 @@ using System.Windows.Forms; namespace EveOPreview.UI { - public partial class MainForm : Form, IMainView + public partial class MainForm : Form, IMainFormView { #region Private fields private readonly ApplicationContext _context; diff --git a/Eve-O-Preview/UI/Interface/IMainView.cs b/Eve-O-Preview/UI/Interface/IMainFormView.cs similarity index 94% rename from Eve-O-Preview/UI/Interface/IMainView.cs rename to Eve-O-Preview/UI/Interface/IMainFormView.cs index 68f6a7e..4af3b92 100644 --- a/Eve-O-Preview/UI/Interface/IMainView.cs +++ b/Eve-O-Preview/UI/Interface/IMainFormView.cs @@ -8,7 +8,7 @@ namespace EveOPreview.UI /// Main view interface /// Presenter uses it to access GUI properties /// - public interface IMainView : IView + public interface IMainFormView : IView { bool MinimizeToTray { get; set; }