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
{