Optionally show a border around the thumbnail of the currently active EVE client
This commit is contained in:
		@@ -5,15 +5,15 @@ using Newtonsoft.Json;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace EveOPreview.Configuration
 | 
					namespace EveOPreview.Configuration
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public class ApplicationConfiguration : IApplicationConfiguration
 | 
						public class AppConfig : IAppConfig
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public ApplicationConfiguration()
 | 
							public AppConfig()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Default values
 | 
								// Default values
 | 
				
			||||||
			this.MinimizeToTray = false;
 | 
								this.MinimizeToTray = false;
 | 
				
			||||||
			this.ThumbnailRefreshPeriod = 500;
 | 
								this.ThumbnailRefreshPeriod = 500;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.ThumbnailsOpacity = 0.5;
 | 
								this.ThumbnailOpacity = 0.5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.EnableClientLayoutTracking = false;
 | 
								this.EnableClientLayoutTracking = false;
 | 
				
			||||||
			this.HideActiveClientThumbnail = false;
 | 
								this.HideActiveClientThumbnail = false;
 | 
				
			||||||
@@ -25,13 +25,16 @@ namespace EveOPreview.Configuration
 | 
				
			|||||||
			this.ThumbnailMinimumSize = new Size(100, 80);
 | 
								this.ThumbnailMinimumSize = new Size(100, 80);
 | 
				
			||||||
			this.ThumbnailMaximumSize = new Size(640, 400);
 | 
								this.ThumbnailMaximumSize = new Size(640, 400);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.EnableThumbnailZoom = false;
 | 
								this.ThumbnailZoomEnabled = false;
 | 
				
			||||||
			this.ThumbnailZoomFactor = 2;
 | 
								this.ThumbnailZoomFactor = 2;
 | 
				
			||||||
			this.ThumbnailZoomAnchor = ZoomAnchor.NW;
 | 
								this.ThumbnailZoomAnchor = ZoomAnchor.NW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.ShowThumbnailOverlays = true;
 | 
								this.ShowThumbnailOverlays = true;
 | 
				
			||||||
			this.ShowThumbnailFrames = true;
 | 
								this.ShowThumbnailFrames = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.EnableActiveClientHighlight = true;
 | 
				
			||||||
 | 
								this.ActiveClientHighlightColor = Color.GreenYellow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.PerClientLayout = new Dictionary<string, Dictionary<string, Point>>();
 | 
								this.PerClientLayout = new Dictionary<string, Dictionary<string, Point>>();
 | 
				
			||||||
			this.FlatLayout = new Dictionary<string, Point>();
 | 
								this.FlatLayout = new Dictionary<string, Point>();
 | 
				
			||||||
			this.ClientLayout = new Dictionary<string, ClientLayout>();
 | 
								this.ClientLayout = new Dictionary<string, ClientLayout>();
 | 
				
			||||||
@@ -41,7 +44,8 @@ namespace EveOPreview.Configuration
 | 
				
			|||||||
		public bool MinimizeToTray { get; set; }
 | 
							public bool MinimizeToTray { get; set; }
 | 
				
			||||||
		public int ThumbnailRefreshPeriod { get; set; }
 | 
							public int ThumbnailRefreshPeriod { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public double ThumbnailsOpacity { get; set; }
 | 
							[JsonProperty("ThumbnailsOpacity")]
 | 
				
			||||||
 | 
							public double ThumbnailOpacity { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public bool EnableClientLayoutTracking { get; set; }
 | 
							public bool EnableClientLayoutTracking { get; set; }
 | 
				
			||||||
		public bool HideActiveClientThumbnail { get; set; }
 | 
							public bool HideActiveClientThumbnail { get; set; }
 | 
				
			||||||
@@ -53,13 +57,17 @@ namespace EveOPreview.Configuration
 | 
				
			|||||||
		public Size ThumbnailMaximumSize { get; set; }
 | 
							public Size ThumbnailMaximumSize { get; set; }
 | 
				
			||||||
		public Size ThumbnailMinimumSize { get; set; }
 | 
							public Size ThumbnailMinimumSize { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public bool EnableThumbnailZoom { get; set; }
 | 
							[JsonProperty("EnableThumbnailZoom")]
 | 
				
			||||||
 | 
							public bool ThumbnailZoomEnabled { get; set; }
 | 
				
			||||||
		public int ThumbnailZoomFactor { get; set; }
 | 
							public int ThumbnailZoomFactor { get; set; }
 | 
				
			||||||
		public ZoomAnchor ThumbnailZoomAnchor { get; set; }
 | 
							public ZoomAnchor ThumbnailZoomAnchor { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public bool ShowThumbnailOverlays { get; set; }
 | 
							public bool ShowThumbnailOverlays { get; set; }
 | 
				
			||||||
		public bool ShowThumbnailFrames { get; set; }
 | 
							public bool ShowThumbnailFrames { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public bool EnableActiveClientHighlight { get; set; }
 | 
				
			||||||
 | 
							public Color ActiveClientHighlightColor { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[JsonProperty]
 | 
							[JsonProperty]
 | 
				
			||||||
		private Dictionary<string, Dictionary<string, Point>> PerClientLayout { get; set; }
 | 
							private Dictionary<string, Dictionary<string, Point>> PerClientLayout { get; set; }
 | 
				
			||||||
		[JsonProperty]
 | 
							[JsonProperty]
 | 
				
			||||||
@@ -7,9 +7,9 @@ namespace EveOPreview.Configuration
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		private const string ConfigurationFileName = "EVE-O Preview.json";
 | 
							private const string ConfigurationFileName = "EVE-O Preview.json";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private readonly IApplicationConfiguration _configuration;
 | 
							private readonly IAppConfig _configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public ConfigurationStorage(IApplicationConfiguration configuration)
 | 
							public ConfigurationStorage(IAppConfig configuration)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this._configuration = configuration;
 | 
								this._configuration = configuration;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,12 +3,12 @@ using System.Windows.Forms;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace EveOPreview.Configuration
 | 
					namespace EveOPreview.Configuration
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public interface IApplicationConfiguration
 | 
						public interface IAppConfig
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		bool MinimizeToTray { get; set; }
 | 
							bool MinimizeToTray { get; set; }
 | 
				
			||||||
		int ThumbnailRefreshPeriod { get; set; }
 | 
							int ThumbnailRefreshPeriod { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		double ThumbnailsOpacity { get; set; }
 | 
							double ThumbnailOpacity { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool EnableClientLayoutTracking { get; set; }
 | 
							bool EnableClientLayoutTracking { get; set; }
 | 
				
			||||||
		bool HideActiveClientThumbnail { get; set; }
 | 
							bool HideActiveClientThumbnail { get; set; }
 | 
				
			||||||
@@ -20,13 +20,16 @@ namespace EveOPreview.Configuration
 | 
				
			|||||||
		Size ThumbnailMinimumSize { get; set; }
 | 
							Size ThumbnailMinimumSize { get; set; }
 | 
				
			||||||
		Size ThumbnailMaximumSize { get; set; }
 | 
							Size ThumbnailMaximumSize { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool EnableThumbnailZoom { get; set; }
 | 
							bool ThumbnailZoomEnabled { get; set; }
 | 
				
			||||||
		int ThumbnailZoomFactor { get; set; }
 | 
							int ThumbnailZoomFactor { get; set; }
 | 
				
			||||||
		ZoomAnchor ThumbnailZoomAnchor { get; set; }
 | 
							ZoomAnchor ThumbnailZoomAnchor { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool ShowThumbnailOverlays { get; set; }
 | 
							bool ShowThumbnailOverlays { get; set; }
 | 
				
			||||||
		bool ShowThumbnailFrames { get; set; }
 | 
							bool ShowThumbnailFrames { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bool EnableActiveClientHighlight { get; set; }
 | 
				
			||||||
 | 
							Color ActiveClientHighlightColor { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Point GetThumbnailLocation(string currentClient, string activeClient, Point defaultLocation);
 | 
							Point GetThumbnailLocation(string currentClient, string activeClient, Point defaultLocation);
 | 
				
			||||||
		void SetThumbnailLocation(string currentClient, string activeClient, Point location);
 | 
							void SetThumbnailLocation(string currentClient, string activeClient, Point location);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -97,7 +97,7 @@
 | 
				
			|||||||
    <Compile Include="ApplicationBase\Presenter.cs" />
 | 
					    <Compile Include="ApplicationBase\Presenter.cs" />
 | 
				
			||||||
    <Compile Include="ApplicationBase\PresenterGeneric.cs" />
 | 
					    <Compile Include="ApplicationBase\PresenterGeneric.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\ConfigurationStorage.cs" />
 | 
					    <Compile Include="Configuration\ConfigurationStorage.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\IApplicationConfiguration.cs" />
 | 
					    <Compile Include="Configuration\IAppConfig.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\ZoomAnchor.cs" />
 | 
					    <Compile Include="Configuration\ZoomAnchor.cs" />
 | 
				
			||||||
    <Compile Include="DwmAPI\DWM_BLURBEHIND.cs" />
 | 
					    <Compile Include="DwmAPI\DWM_BLURBEHIND.cs" />
 | 
				
			||||||
    <Compile Include="DwmAPI\DWM_THUMBNAIL_PROPERTIES.cs" />
 | 
					    <Compile Include="DwmAPI\DWM_THUMBNAIL_PROPERTIES.cs" />
 | 
				
			||||||
@@ -118,7 +118,7 @@
 | 
				
			|||||||
    <Compile Include="UI\Interface\IThumbnailDescriptionView.cs" />
 | 
					    <Compile Include="UI\Interface\IThumbnailDescriptionView.cs" />
 | 
				
			||||||
    <Compile Include="UI\Interface\IThumbnailDescriptionViewFactory.cs" />
 | 
					    <Compile Include="UI\Interface\IThumbnailDescriptionViewFactory.cs" />
 | 
				
			||||||
    <Compile Include="UI\Interface\ViewZoomAnchor.cs" />
 | 
					    <Compile Include="UI\Interface\ViewZoomAnchor.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\ApplicationConfiguration.cs" />
 | 
					    <Compile Include="Configuration\AppConfig.cs" />
 | 
				
			||||||
    <Compile Include="Hotkeys\HotkeyHandler.cs" />
 | 
					    <Compile Include="Hotkeys\HotkeyHandler.cs" />
 | 
				
			||||||
    <Compile Include="Hotkeys\HotkeyHandlerNativeMethods.cs" />
 | 
					    <Compile Include="Hotkeys\HotkeyHandlerNativeMethods.cs" />
 | 
				
			||||||
    <Compile Include="UI\Implementation\MainForm.cs">
 | 
					    <Compile Include="UI\Implementation\MainForm.cs">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		#endregion
 | 
							#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#region Private fields
 | 
							#region Private fields
 | 
				
			||||||
		private readonly IApplicationConfiguration _configuration;
 | 
							private readonly IAppConfig _configuration;
 | 
				
			||||||
		private readonly IConfigurationStorage _configurationStorage;
 | 
							private readonly IConfigurationStorage _configurationStorage;
 | 
				
			||||||
		private readonly IThumbnailDescriptionViewFactory _thumbnailDescriptionViewFactory;
 | 
							private readonly IThumbnailDescriptionViewFactory _thumbnailDescriptionViewFactory;
 | 
				
			||||||
		private readonly IDictionary<IntPtr, IThumbnailDescriptionView> _thumbnailDescriptionViews;
 | 
							private readonly IDictionary<IntPtr, IThumbnailDescriptionView> _thumbnailDescriptionViews;
 | 
				
			||||||
@@ -22,7 +22,7 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		private bool _exitApplication;
 | 
							private bool _exitApplication;
 | 
				
			||||||
		#endregion
 | 
							#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public MainPresenter(IApplicationController controller, IMainView view, IApplicationConfiguration configuration, IConfigurationStorage configurationStorage,
 | 
							public MainPresenter(IApplicationController controller, IMainView view, IAppConfig configuration, IConfigurationStorage configurationStorage,
 | 
				
			||||||
								IThumbnailManager thumbnailManager, IThumbnailDescriptionViewFactory thumbnailDescriptionViewFactory)
 | 
													IThumbnailManager thumbnailManager, IThumbnailDescriptionViewFactory thumbnailDescriptionViewFactory)
 | 
				
			||||||
			: base(controller, view)
 | 
								: base(controller, view)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -98,18 +98,18 @@ namespace EveOPreview.UI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			this.View.MinimizeToTray = this._configuration.MinimizeToTray;
 | 
								this.View.MinimizeToTray = this._configuration.MinimizeToTray;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.View.ThumbnailsOpacity = this._configuration.ThumbnailsOpacity;
 | 
								this.View.ThumbnailOpacity = this._configuration.ThumbnailOpacity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.View.EnableClientLayoutTracking = this._configuration.EnableClientLayoutTracking;
 | 
								this.View.EnableClientLayoutTracking = this._configuration.EnableClientLayoutTracking;
 | 
				
			||||||
			this.View.HideActiveClientThumbnail = this._configuration.HideActiveClientThumbnail;
 | 
								this.View.HideActiveClientThumbnail = this._configuration.HideActiveClientThumbnail;
 | 
				
			||||||
			this.View.ShowThumbnailsAlwaysOnTop = this._configuration.ShowThumbnailsAlwaysOnTop;
 | 
								this.View.ShowThumbnailsAlwaysOnTop = this._configuration.ShowThumbnailsAlwaysOnTop;
 | 
				
			||||||
			this.View.HideThumbnailsOnLostFocus = this._configuration.HideThumbnailsOnLostFocus;
 | 
								this.View.HideThumbnailsOnLostFocus = this._configuration.HideThumbnailsOnLostFocus;
 | 
				
			||||||
			this.View.EnablePerClientThumbnailsLayouts = this._configuration.EnablePerClientThumbnailLayouts;
 | 
								this.View.EnablePerClientThumbnailLayouts = this._configuration.EnablePerClientThumbnailLayouts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.View.SetThumbnailSizeLimitations(this._configuration.ThumbnailMinimumSize, this._configuration.ThumbnailMaximumSize);
 | 
								this.View.SetThumbnailSizeLimitations(this._configuration.ThumbnailMinimumSize, this._configuration.ThumbnailMaximumSize);
 | 
				
			||||||
			this.View.ThumbnailSize = this._configuration.ThumbnailSize;
 | 
								this.View.ThumbnailSize = this._configuration.ThumbnailSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.View.EnableThumbnailZoom = this._configuration.EnableThumbnailZoom;
 | 
								this.View.EnableThumbnailZoom = this._configuration.ThumbnailZoomEnabled;
 | 
				
			||||||
			this.View.ThumbnailZoomFactor = this._configuration.ThumbnailZoomFactor;
 | 
								this.View.ThumbnailZoomFactor = this._configuration.ThumbnailZoomFactor;
 | 
				
			||||||
			this.View.ThumbnailZoomAnchor = ViewZoomAnchorConverter.Convert(this._configuration.ThumbnailZoomAnchor);
 | 
								this.View.ThumbnailZoomAnchor = ViewZoomAnchorConverter.Convert(this._configuration.ThumbnailZoomAnchor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,17 +121,17 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			this._configuration.MinimizeToTray = this.View.MinimizeToTray;
 | 
								this._configuration.MinimizeToTray = this.View.MinimizeToTray;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this._configuration.ThumbnailsOpacity = (float)this.View.ThumbnailsOpacity;
 | 
								this._configuration.ThumbnailOpacity = (float)this.View.ThumbnailOpacity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this._configuration.EnableClientLayoutTracking = this.View.EnableClientLayoutTracking;
 | 
								this._configuration.EnableClientLayoutTracking = this.View.EnableClientLayoutTracking;
 | 
				
			||||||
			this._configuration.HideActiveClientThumbnail = this.View.HideActiveClientThumbnail;
 | 
								this._configuration.HideActiveClientThumbnail = this.View.HideActiveClientThumbnail;
 | 
				
			||||||
			this._configuration.ShowThumbnailsAlwaysOnTop = this.View.ShowThumbnailsAlwaysOnTop;
 | 
								this._configuration.ShowThumbnailsAlwaysOnTop = this.View.ShowThumbnailsAlwaysOnTop;
 | 
				
			||||||
			this._configuration.HideThumbnailsOnLostFocus = this.View.HideThumbnailsOnLostFocus;
 | 
								this._configuration.HideThumbnailsOnLostFocus = this.View.HideThumbnailsOnLostFocus;
 | 
				
			||||||
			this._configuration.EnablePerClientThumbnailLayouts = this.View.EnablePerClientThumbnailsLayouts;
 | 
								this._configuration.EnablePerClientThumbnailLayouts = this.View.EnablePerClientThumbnailLayouts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this._configuration.ThumbnailSize = this.View.ThumbnailSize;
 | 
								this._configuration.ThumbnailSize = this.View.ThumbnailSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this._configuration.EnableThumbnailZoom = this.View.EnableThumbnailZoom;
 | 
								this._configuration.ThumbnailZoomEnabled = this.View.EnableThumbnailZoom;
 | 
				
			||||||
			this._configuration.ThumbnailZoomFactor = this.View.ThumbnailZoomFactor;
 | 
								this._configuration.ThumbnailZoomFactor = this.View.ThumbnailZoomFactor;
 | 
				
			||||||
			this._configuration.ThumbnailZoomAnchor = ViewZoomAnchorConverter.Convert(this.View.ThumbnailZoomAnchor);
 | 
								this._configuration.ThumbnailZoomAnchor = ViewZoomAnchorConverter.Convert(this.View.ThumbnailZoomAnchor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ namespace EveOPreview
 | 
				
			|||||||
				.RegisterService<IThumbnailViewFactory, ThumbnailViewFactory>()
 | 
									.RegisterService<IThumbnailViewFactory, ThumbnailViewFactory>()
 | 
				
			||||||
				.RegisterService<IThumbnailDescriptionViewFactory, ThumbnailDescriptionViewFactory>()
 | 
									.RegisterService<IThumbnailDescriptionViewFactory, ThumbnailDescriptionViewFactory>()
 | 
				
			||||||
				.RegisterService<IConfigurationStorage, ConfigurationStorage>()
 | 
									.RegisterService<IConfigurationStorage, ConfigurationStorage>()
 | 
				
			||||||
				.RegisterInstance<IApplicationConfiguration>(new ApplicationConfiguration());
 | 
									.RegisterInstance<IAppConfig>(new AppConfig());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			controller.Run<MainPresenter>();
 | 
								controller.Run<MainPresenter>();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,10 +50,9 @@
 | 
				
			|||||||
			// OverlayLabel
 | 
								// OverlayLabel
 | 
				
			||||||
			// 
 | 
								// 
 | 
				
			||||||
			this.OverlayLabel.AutoSize = true;
 | 
								this.OverlayLabel.AutoSize = true;
 | 
				
			||||||
			this.OverlayLabel.Dock = System.Windows.Forms.DockStyle.Top;
 | 
					 | 
				
			||||||
			this.OverlayLabel.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
 | 
								this.OverlayLabel.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
 | 
				
			||||||
			this.OverlayLabel.ForeColor = System.Drawing.Color.DarkGray;
 | 
								this.OverlayLabel.ForeColor = System.Drawing.Color.DarkGray;
 | 
				
			||||||
			this.OverlayLabel.Location = new System.Drawing.Point(0, 0);
 | 
								this.OverlayLabel.Location = new System.Drawing.Point(8, 8);
 | 
				
			||||||
			this.OverlayLabel.Name = "OverlayLabel";
 | 
								this.OverlayLabel.Name = "OverlayLabel";
 | 
				
			||||||
			this.OverlayLabel.Size = new System.Drawing.Size(25, 13);
 | 
								this.OverlayLabel.Size = new System.Drawing.Size(25, 13);
 | 
				
			||||||
			this.OverlayLabel.TabIndex = 1;
 | 
								this.OverlayLabel.TabIndex = 1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Drawing;
 | 
				
			||||||
using System.Windows.Forms;
 | 
					using System.Windows.Forms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace EveOPreview.UI
 | 
					namespace EveOPreview.UI
 | 
				
			||||||
@@ -7,6 +8,8 @@ namespace EveOPreview.UI
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		#region Private fields
 | 
							#region Private fields
 | 
				
			||||||
		private readonly Action<object, MouseEventArgs> _areaClickAction;
 | 
							private readonly Action<object, MouseEventArgs> _areaClickAction;
 | 
				
			||||||
 | 
							private bool _highlightEnabled;
 | 
				
			||||||
 | 
							private Color _highlightColor;
 | 
				
			||||||
		#endregion
 | 
							#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public ThumbnailOverlay(Form owner, Action<object, MouseEventArgs> areaClickAction)
 | 
							public ThumbnailOverlay(Form owner, Action<object, MouseEventArgs> areaClickAction)
 | 
				
			||||||
@@ -14,6 +17,9 @@ namespace EveOPreview.UI
 | 
				
			|||||||
			this.Owner = owner;
 | 
								this.Owner = owner;
 | 
				
			||||||
			this._areaClickAction = areaClickAction;
 | 
								this._areaClickAction = areaClickAction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this._highlightEnabled = false;
 | 
				
			||||||
 | 
								this._highlightColor = Color.Red;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			InitializeComponent();
 | 
								InitializeComponent();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,6 +33,24 @@ namespace EveOPreview.UI
 | 
				
			|||||||
			this.OverlayLabel.Text = label;
 | 
								this.OverlayLabel.Text = label;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public void EnableOverlayLabel(bool enable)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this.OverlayLabel.Visible = enable;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public void EnableHighlight(bool enabled, Color color)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (!enabled && !this._highlightEnabled)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// Nothing to do here
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this._highlightEnabled = enabled;
 | 
				
			||||||
 | 
								this._highlightColor = color;
 | 
				
			||||||
 | 
								this.Refresh();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		protected override CreateParams CreateParams
 | 
							protected override CreateParams CreateParams
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			get
 | 
								get
 | 
				
			||||||
@@ -36,5 +60,19 @@ namespace EveOPreview.UI
 | 
				
			|||||||
				return Params;
 | 
									return Params;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							protected override void OnPaint(PaintEventArgs e)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								base.OnPaint(e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (this._highlightEnabled)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle,
 | 
				
			||||||
 | 
																this._highlightColor, 4, ButtonBorderStyle.Solid,
 | 
				
			||||||
 | 
																this._highlightColor, 4, ButtonBorderStyle.Solid,
 | 
				
			||||||
 | 
																this._highlightColor, 4, ButtonBorderStyle.Solid,
 | 
				
			||||||
 | 
																this._highlightColor, 4, ButtonBorderStyle.Solid);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ namespace EveOPreview.UI
 | 
				
			|||||||
			this.Text = "Preview";
 | 
								this.Text = "Preview";
 | 
				
			||||||
			this.TopMost = true;
 | 
								this.TopMost = true;
 | 
				
			||||||
			this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MouseDown_Handler);
 | 
								this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MouseDown_Handler);
 | 
				
			||||||
			this.MouseLeave += new System.EventHandler(this.MouseLeave_Handler);
 | 
					 | 
				
			||||||
			this.MouseEnter += new System.EventHandler(this.MouseEnter_Handler);
 | 
								this.MouseEnter += new System.EventHandler(this.MouseEnter_Handler);
 | 
				
			||||||
 | 
								this.MouseLeave += new System.EventHandler(this.MouseLeave_Handler);
 | 
				
			||||||
			this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.MouseMove_Handler);
 | 
								this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.MouseMove_Handler);
 | 
				
			||||||
			this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.MouseUp_Handler);
 | 
								this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.MouseUp_Handler);
 | 
				
			||||||
			this.Move += new System.EventHandler(this.Move_Handler);
 | 
								this.Move += new System.EventHandler(this.Move_Handler);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,11 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			base.Show();
 | 
								base.Show();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Thumbnail will be registered during the Refresh cycle
 | 
								this._isPositionChanged = true;
 | 
				
			||||||
 | 
								this._isSizeChanged = true;
 | 
				
			||||||
 | 
								this._isOverlayVisible = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Thumbnail will be properly registered during the Manager's Refresh cycle
 | 
				
			||||||
			this.Refresh();
 | 
								this.Refresh();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.IsActive = true;
 | 
								this.IsActive = true;
 | 
				
			||||||
@@ -152,6 +156,12 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		public void SetOpacity(double opacity)
 | 
							public void SetOpacity(double opacity)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this.Opacity = opacity;
 | 
								this.Opacity = opacity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Overlay opacity settings
 | 
				
			||||||
 | 
								// Of the thumbnail's opacity is almost full then set the overlay's one to
 | 
				
			||||||
 | 
								// full. Otherwise set it to half of the thumnail opacity
 | 
				
			||||||
 | 
								// Opacity value is stored even if the overlay is not displayed atm
 | 
				
			||||||
 | 
								this._overlay.Opacity = this.Opacity > 0.9 ? 1.0 : 1.0 - (1.0 - this.Opacity) / 2;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void SetFrames(bool enable)
 | 
							public void SetFrames(bool enable)
 | 
				
			||||||
@@ -187,6 +197,11 @@ namespace EveOPreview.UI
 | 
				
			|||||||
			this._isTopMost = enableTopmost;
 | 
								this._isTopMost = enableTopmost;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public void SetHighlight(bool enabled, Color color)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this._overlay.EnableHighlight(enabled, color);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void ZoomIn(ViewZoomAnchor anchor, int zoomFactor)
 | 
							public void ZoomIn(ViewZoomAnchor anchor, int zoomFactor)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			int oldWidth = this._baseZoomSize.Width;
 | 
								int oldWidth = this._baseZoomSize.Width;
 | 
				
			||||||
@@ -312,40 +327,34 @@ namespace EveOPreview.UI
 | 
				
			|||||||
				this.UnregisterThumbnail(obsoleteThumbnailHanlde);
 | 
									this.UnregisterThumbnail(obsoleteThumbnailHanlde);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!this.IsOverlayEnabled)
 | 
								this._overlay.EnableOverlayLabel(this.IsOverlayEnabled);
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				if (this._isOverlayVisible)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					this._overlay.Hide();
 | 
					 | 
				
			||||||
					this._isOverlayVisible = false;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				return;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!this._isOverlayVisible)
 | 
								if (!this._isOverlayVisible)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									// One-time action to show the Overlay before it is set up
 | 
				
			||||||
 | 
									// Otherwise its position won't be set
 | 
				
			||||||
				this._overlay.Show();
 | 
									this._overlay.Show();
 | 
				
			||||||
				this._isOverlayVisible = true;
 | 
									this._isOverlayVisible = true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if (!(sizeChanged || locationChanged))
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (!(sizeChanged || locationChanged))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					// No need to adjust in the overlay location if it is already visible and properly set
 | 
										// No need to adjust in the overlay location if it is already visible and properly set
 | 
				
			||||||
					return;
 | 
										return;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Size overlaySize = this.ClientSize;
 | 
								Size overlaySize = this.ClientSize;
 | 
				
			||||||
			overlaySize.Width -= 2 * 5;
 | 
					 | 
				
			||||||
			overlaySize.Height -= 2 * 5;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			Point overlayLocation = this.Location;
 | 
								Point overlayLocation = this.Location;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			overlayLocation.X += 5 + (this.Size.Width - this.ClientSize.Width) / 2;
 | 
								overlayLocation.X += (this.Size.Width - this.ClientSize.Width) / 2;
 | 
				
			||||||
			overlayLocation.Y += 5 + (this.Size.Height - this.ClientSize.Height) - (this.Size.Width - this.ClientSize.Width) / 2;
 | 
								overlayLocation.Y += (this.Size.Height - this.ClientSize.Height) - (this.Size.Width - this.ClientSize.Width) / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this._isPositionChanged = false;
 | 
								this._isPositionChanged = false;
 | 
				
			||||||
			this._overlay.Size = overlaySize;
 | 
								this._overlay.Size = overlaySize;
 | 
				
			||||||
			this._overlay.Location = overlayLocation;
 | 
								this._overlay.Location = overlayLocation;
 | 
				
			||||||
 | 
								this._overlay.Invalidate();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#region GUI events
 | 
							#region GUI events
 | 
				
			||||||
@@ -427,26 +436,7 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		#endregion
 | 
							#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// This pair of methods saves/restores certain window propeties
 | 
							#region Thumbnail management
 | 
				
			||||||
		// Methods are used to remove the 'Zoom' effect (if any) when the
 | 
					 | 
				
			||||||
		// custom resize/move mode is activated
 | 
					 | 
				
			||||||
		// Methods are kept on this level because moving to the presenter
 | 
					 | 
				
			||||||
		// the code that responds to the mouse events like movement
 | 
					 | 
				
			||||||
		// seems like a huge overkill
 | 
					 | 
				
			||||||
		private void SaveWindowSizeAndLocation()
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			this._baseZoomSize = this.Size;
 | 
					 | 
				
			||||||
			this._baseZoomLocation = this.Location;
 | 
					 | 
				
			||||||
			this._baseZoomMaximumSize = this.MaximumSize;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		private void RestoreWindowSizeAndLocation()
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			this.Size = this._baseZoomSize;
 | 
					 | 
				
			||||||
			this.MaximumSize = this._baseZoomMaximumSize;
 | 
					 | 
				
			||||||
			this.Location = this._baseZoomLocation;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		private void RegisterThumbnail()
 | 
							private void RegisterThumbnail()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this._thumbnailHandle = WindowManagerNativeMethods.DwmRegisterThumbnail(this.Handle, this.Id);
 | 
								this._thumbnailHandle = WindowManagerNativeMethods.DwmRegisterThumbnail(this.Handle, this.Id);
 | 
				
			||||||
@@ -473,6 +463,28 @@ namespace EveOPreview.UI
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							#endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#region Custom Mouse mode
 | 
				
			||||||
 | 
							// This pair of methods saves/restores certain window propeties
 | 
				
			||||||
 | 
							// Methods are used to remove the 'Zoom' effect (if any) when the
 | 
				
			||||||
 | 
							// custom resize/move mode is activated
 | 
				
			||||||
 | 
							// Methods are kept on this level because moving to the presenter
 | 
				
			||||||
 | 
							// the code that responds to the mouse events like movement
 | 
				
			||||||
 | 
							// seems like a huge overkill
 | 
				
			||||||
 | 
							private void SaveWindowSizeAndLocation()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this._baseZoomSize = this.Size;
 | 
				
			||||||
 | 
								this._baseZoomLocation = this.Location;
 | 
				
			||||||
 | 
								this._baseZoomMaximumSize = this.MaximumSize;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void RestoreWindowSizeAndLocation()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this.Size = this._baseZoomSize;
 | 
				
			||||||
 | 
								this.MaximumSize = this._baseZoomMaximumSize;
 | 
				
			||||||
 | 
								this.Location = this._baseZoomLocation;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private void EnterCustomMouseMode()
 | 
							private void EnterCustomMouseMode()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -507,5 +519,6 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			this._isCustomMouseModeActive = false;
 | 
								this._isCustomMouseModeActive = false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							#endregion
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -12,13 +12,13 @@ namespace EveOPreview.UI
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		bool MinimizeToTray { get; set; }
 | 
							bool MinimizeToTray { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		double ThumbnailsOpacity { get; set; }
 | 
							double ThumbnailOpacity { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool EnableClientLayoutTracking { get; set; }
 | 
							bool EnableClientLayoutTracking { get; set; }
 | 
				
			||||||
		bool HideActiveClientThumbnail { get; set; }
 | 
							bool HideActiveClientThumbnail { get; set; }
 | 
				
			||||||
		bool ShowThumbnailsAlwaysOnTop { get; set; }
 | 
							bool ShowThumbnailsAlwaysOnTop { get; set; }
 | 
				
			||||||
		bool HideThumbnailsOnLostFocus { get; set; }
 | 
							bool HideThumbnailsOnLostFocus { get; set; }
 | 
				
			||||||
		bool EnablePerClientThumbnailsLayouts { get; set; }
 | 
							bool EnablePerClientThumbnailLayouts { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Size ThumbnailSize { get; set; }
 | 
							Size ThumbnailSize { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,6 +29,9 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		bool ShowThumbnailOverlays { get; set; }
 | 
							bool ShowThumbnailOverlays { get; set; }
 | 
				
			||||||
		bool ShowThumbnailFrames { get; set; }
 | 
							bool ShowThumbnailFrames { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bool EnableActiveClientHighlight { get; set; }
 | 
				
			||||||
 | 
							Color ActiveClientHighlightColor { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void SetForumUrl(string url);
 | 
							void SetForumUrl(string url);
 | 
				
			||||||
		void SetThumbnailSizeLimitations(Size minimumSize, Size maximumSize);
 | 
							void SetThumbnailSizeLimitations(Size minimumSize, Size maximumSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,7 @@ namespace EveOPreview.UI
 | 
				
			|||||||
		void SetOpacity(double opacity);
 | 
							void SetOpacity(double opacity);
 | 
				
			||||||
		void SetFrames(bool enable);
 | 
							void SetFrames(bool enable);
 | 
				
			||||||
		void SetTopMost(bool enableTopmost);
 | 
							void SetTopMost(bool enableTopmost);
 | 
				
			||||||
 | 
							void SetHighlight(bool enabled, Color color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void ZoomIn(ViewZoomAnchor anchor, int zoomFactor);
 | 
							void ZoomIn(ViewZoomAnchor anchor, int zoomFactor);
 | 
				
			||||||
		void ZoomOut();
 | 
							void ZoomOut();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user