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; }