187 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| using Newtonsoft.Json;
 | |
| 
 | |
| namespace EveOPreview.Configuration
 | |
| {
 | |
| 	class ThumbnailConfig : IThumbnailConfig
 | |
| 	{
 | |
| 		public ThumbnailConfig()
 | |
| 		{
 | |
| 			this.MinimizeToTray = false;
 | |
| 			this.ThumbnailRefreshPeriod = 500;
 | |
| 
 | |
| 			this.ThumbnailOpacity = 0.5;
 | |
| 
 | |
| 			this.EnableClientLayoutTracking = false;
 | |
| 			this.HideActiveClientThumbnail = false;
 | |
| 			this.ShowThumbnailsAlwaysOnTop = true;
 | |
| 			this.HideThumbnailsOnLostFocus = false;
 | |
| 			this.EnablePerClientThumbnailLayouts = false;
 | |
| 
 | |
| 			this.ThumbnailSize = new Size(250, 150);
 | |
| 			this.ThumbnailMinimumSize = new Size(100, 80);
 | |
| 			this.ThumbnailMaximumSize = new Size(640, 400);
 | |
| 
 | |
| 			this.ThumbnailZoomEnabled = false;
 | |
| 			this.ThumbnailZoomFactor = 2;
 | |
| 			this.ThumbnailZoomAnchor = ZoomAnchor.NW;
 | |
| 
 | |
| 			this.ShowThumbnailOverlays = true;
 | |
| 			this.ShowThumbnailFrames = true;
 | |
| 
 | |
| 			this.EnableActiveClientHighlight = false;
 | |
| 			this.ActiveClientHighlightColor = Color.Yellow;
 | |
| 
 | |
| 			this.PerClientLayout = new Dictionary<string, Dictionary<string, Point>>();
 | |
| 			this.FlatLayout = new Dictionary<string, Point>();
 | |
| 			this.ClientLayout = new Dictionary<string, ClientLayout>();
 | |
| 			this.ClientHotkey = new Dictionary<string, string>();
 | |
| 		}
 | |
| 
 | |
| 		public bool MinimizeToTray { get; set; }
 | |
| 		public int ThumbnailRefreshPeriod { get; set; }
 | |
| 
 | |
| 		[JsonProperty("ThumbnailsOpacity")]
 | |
| 		public double ThumbnailOpacity { get; set; }
 | |
| 
 | |
| 		public bool EnableClientLayoutTracking { get; set; }
 | |
| 		public bool HideActiveClientThumbnail { get; set; }
 | |
| 		public bool ShowThumbnailsAlwaysOnTop { get; set; }
 | |
| 		public bool HideThumbnailsOnLostFocus { get; set; }
 | |
| 		public bool EnablePerClientThumbnailLayouts { get; set; }
 | |
| 
 | |
| 		public Size ThumbnailSize { get; set; }
 | |
| 		public Size ThumbnailMaximumSize { get; set; }
 | |
| 		public Size ThumbnailMinimumSize { get; set; }
 | |
| 
 | |
| 		[JsonProperty("EnableThumbnailZoom")]
 | |
| 		public bool ThumbnailZoomEnabled { get; set; }
 | |
| 		public int ThumbnailZoomFactor { get; set; }
 | |
| 		public ZoomAnchor ThumbnailZoomAnchor { get; set; }
 | |
| 
 | |
| 		public bool ShowThumbnailOverlays { get; set; }
 | |
| 		public bool ShowThumbnailFrames { get; set; }
 | |
| 
 | |
| 		public bool EnableActiveClientHighlight { get; set; }
 | |
| 		public Color ActiveClientHighlightColor { get; set; }
 | |
| 
 | |
| 		[JsonProperty]
 | |
| 		private Dictionary<string, Dictionary<string, Point>> PerClientLayout { get; set; }
 | |
| 		[JsonProperty]
 | |
| 		private Dictionary<string, Point> FlatLayout { get; set; }
 | |
| 		[JsonProperty]
 | |
| 		private Dictionary<string, ClientLayout> ClientLayout { get; set; }
 | |
| 		[JsonProperty]
 | |
| 		private Dictionary<string, string> ClientHotkey { get; set; }
 | |
| 
 | |
| 		public Point GetThumbnailLocation(string currentClient, string activeClient, Point defaultLocation)
 | |
| 		{
 | |
| 			Dictionary<string, Point> layoutSource = null;
 | |
| 
 | |
| 			if (this.EnablePerClientThumbnailLayouts)
 | |
| 			{
 | |
| 				if (!string.IsNullOrEmpty(activeClient))
 | |
| 				{
 | |
| 					this.PerClientLayout.TryGetValue(activeClient, out layoutSource);
 | |
| 				}
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				layoutSource = this.FlatLayout;
 | |
| 			}
 | |
| 
 | |
| 			if (layoutSource == null)
 | |
| 			{
 | |
| 				return defaultLocation;
 | |
| 			}
 | |
| 
 | |
| 			Point location;
 | |
| 			return layoutSource.TryGetValue(currentClient, out location) ? location : defaultLocation;
 | |
| 		}
 | |
| 
 | |
| 		public void SetThumbnailLocation(string currentClient, string activeClient, Point location)
 | |
| 		{
 | |
| 			Dictionary<string, Point> layoutSource;
 | |
| 
 | |
| 			if (this.EnablePerClientThumbnailLayouts)
 | |
| 			{
 | |
| 				if (string.IsNullOrEmpty(activeClient))
 | |
| 				{
 | |
| 					return;
 | |
| 				}
 | |
| 
 | |
| 				if (!this.PerClientLayout.TryGetValue(activeClient, out layoutSource))
 | |
| 				{
 | |
| 					layoutSource = new Dictionary<string, Point>();
 | |
| 					this.PerClientLayout[activeClient] = layoutSource;
 | |
| 				}
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				layoutSource = this.FlatLayout;
 | |
| 			}
 | |
| 
 | |
| 			layoutSource[currentClient] = location;
 | |
| 		}
 | |
| 
 | |
| 		public ClientLayout GetClientLayout(string currentClient)
 | |
| 		{
 | |
| 			ClientLayout layout;
 | |
| 			this.ClientLayout.TryGetValue(currentClient, out layout);
 | |
| 
 | |
| 			return layout;
 | |
| 		}
 | |
| 
 | |
| 		public void SetClientLayout(string currentClient, ClientLayout layout)
 | |
| 		{
 | |
| 			this.ClientLayout[currentClient] = layout;
 | |
| 		}
 | |
| 
 | |
| 		public Keys GetClientHotkey(string currentClient)
 | |
| 		{
 | |
| 			string hotkey;
 | |
| 			if (this.ClientHotkey.TryGetValue(currentClient, out hotkey))
 | |
| 			{
 | |
| 				// Protect from incorrect values
 | |
| 				object rawValue = (new KeysConverter()).ConvertFromInvariantString(hotkey);
 | |
| 				return rawValue != null ? (Keys)rawValue : Keys.None;
 | |
| 			}
 | |
| 
 | |
| 			return Keys.None;
 | |
| 		}
 | |
| 
 | |
| 		public void SetClientHotkey(string currentClient, Keys hotkey)
 | |
| 		{
 | |
| 			this.ClientHotkey[currentClient] = (new KeysConverter()).ConvertToInvariantString(hotkey);
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Applies restrictions to different parameters of the config
 | |
| 		/// </summary>
 | |
| 		public void ApplyRestrictions()
 | |
| 		{
 | |
| 			this.ThumbnailRefreshPeriod = ThumbnailConfig.ApplyRestrictions(this.ThumbnailRefreshPeriod, 300, 1000);
 | |
| 			this.ThumbnailSize = new Size(ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Width, this.ThumbnailMinimumSize.Width, this.ThumbnailMaximumSize.Width),
 | |
| 				ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height));
 | |
| 			this.ThumbnailOpacity = ThumbnailConfig.ApplyRestrictions((int)(this.ThumbnailOpacity * 100.00), 20, 100) / 100.00;
 | |
| 			this.ThumbnailZoomFactor = ThumbnailConfig.ApplyRestrictions(this.ThumbnailZoomFactor, 2, 10);
 | |
| 		}
 | |
| 
 | |
| 		private static int ApplyRestrictions(int value, int minimum, int maximum)
 | |
| 		{
 | |
| 			if (value <= minimum)
 | |
| 			{
 | |
| 				return minimum;
 | |
| 			}
 | |
| 
 | |
| 			if (value >= maximum)
 | |
| 			{
 | |
| 				return maximum;
 | |
| 			}
 | |
| 
 | |
| 			return value;
 | |
| 		}
 | |
| 	}
 | |
| } | 
