Merge branch 'develop'

This commit is contained in:
Anton Kasyanov
2017-06-17 23:23:05 +03:00
24 changed files with 1941 additions and 1817 deletions

View File

@@ -0,0 +1,50 @@
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace EveOPreview
{
// A really very primitive exception handler stuff here
// No IoC, no fancy DI containers - just a plain exception stacktrace dump
// If this code is called then something was gone really bad
// so even the DI infrastructure might be dead already.
// So this dumb and non elegant approach is used
sealed class ExceptionHandler
{
private const string ExceptionDumpFileName = "EVE-O Preview.log";
private const string ExceptionMessage = "EVE-O Preview has encountered a problem and needs to close. Additional information has been saved in the crash log file.";
public void SetupExceptionHandlers()
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += delegate (Object sender, ThreadExceptionEventArgs e)
{
this.ExceptionEventHandler(e.Exception);
};
AppDomain.CurrentDomain.UnhandledException += delegate (Object sender, UnhandledExceptionEventArgs e)
{
this.ExceptionEventHandler(e.ExceptionObject as Exception);
};
}
private void ExceptionEventHandler(Exception exception)
{
try
{
String exceptionMessage = exception.ToString();
File.WriteAllText(ExceptionHandler.ExceptionDumpFileName, exceptionMessage);
MessageBox.Show(ExceptionHandler.ExceptionMessage, @"EVE-O Preview", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch
{
// We are in unstable state now so even this operation might fail
// Still we actually don't care anymore - anyway the application has been cashed
}
System.Environment.Exit(1);
}
}
}

View File

@@ -34,6 +34,7 @@ namespace EveOPreview.Configuration
Color ActiveClientHighlightColor { get; set; } Color ActiveClientHighlightColor { get; set; }
int ActiveClientHighlightThickness { get; set; } int ActiveClientHighlightThickness { get; set; }
Point GetDefaultThumbnailLocation();
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);

View File

@@ -80,6 +80,14 @@ namespace EveOPreview.Configuration
[JsonProperty] [JsonProperty]
private Dictionary<string, string> ClientHotkey { get; set; } private Dictionary<string, string> ClientHotkey { get; set; }
public Point GetDefaultThumbnailLocation()
{
// Returns default thumbnail location
// This location can be used for f.e. EVE clients sitting on the login screen
// Can be made configurable later (that's why it was moved out here)
return new Point(5, 5);
}
public Point GetThumbnailLocation(string currentClient, string activeClient, Point defaultLocation) public Point GetThumbnailLocation(string currentClient, string activeClient, Point defaultLocation)
{ {
Point location; Point location;

View File

@@ -119,6 +119,10 @@ namespace EveOPreview
public const UInt32 WS_EX_NOACTIVATE = 0x08000000; public const UInt32 WS_EX_NOACTIVATE = 0x08000000;
public const int WM_SIZE = 5; public const int WM_SIZE = 5;
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MINIMIZE = 0xf020;
public const int SIZE_RESTORED = 0; public const int SIZE_RESTORED = 0;
public const int SIZE_MINIMIZED = 1; public const int SIZE_MINIMIZED = 1;
public const int SIZE_MAXIMIZED = 2; public const int SIZE_MAXIMIZED = 2;

View File

@@ -71,13 +71,15 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup /> <PropertyGroup />
<ItemGroup> <ItemGroup>
<Reference Include="LightInject, Version=4.0.9.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Costura, Version=1.6.2.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\LightInject.4.0.9\lib\net45\LightInject.dll</HintPath> <HintPath>..\packages\Costura.Fody.1.6.2\lib\dotnet\Costura.dll</HintPath>
<Private>True</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="LightInject, Version=5.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\LightInject.5.0.3\lib\net45\LightInject.dll</HintPath>
<Private>True</Private> </Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Deployment" /> <Reference Include="System.Deployment" />
@@ -90,6 +92,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ApplicationBase\ApplicationController.cs" /> <Compile Include="ApplicationBase\ApplicationController.cs" />
<Compile Include="ApplicationBase\ExceptionHandler.cs" />
<Compile Include="ApplicationBase\IApplicationController.cs" /> <Compile Include="ApplicationBase\IApplicationController.cs" />
<Compile Include="ApplicationBase\IIocContainer.cs" /> <Compile Include="ApplicationBase\IIocContainer.cs" />
<Compile Include="ApplicationBase\IPresenterGeneric.cs" /> <Compile Include="ApplicationBase\IPresenterGeneric.cs" />
@@ -162,7 +165,6 @@
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
</Compile> </Compile>
<None Include="packages.config" />
<Compile Include="UI\Implementation\ThumbnailView.cs"> <Compile Include="UI\Implementation\ThumbnailView.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -172,21 +174,24 @@
<Compile Include="DwmAPI\WindowManagerNativeMethods.cs" /> <Compile Include="DwmAPI\WindowManagerNativeMethods.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" />
<None Include="Resources\icon.png" /> <None Include="Resources\icon.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="FodyWeavers.xml" /> <None Include="FodyWeavers.xml" />
<Content Include="icon.ico" /> <Content Include="icon.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Fody.1.29.4\build\dotnet\Fody.targets" Condition="Exists('..\packages\Fody.1.29.4\build\dotnet\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\Fody.1.29.4\build\dotnet\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.1.29.4\build\dotnet\Fody.targets'))" /> <Error Condition="!Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets'))" />
</Target> </Target>
<Import Project="..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets" Condition="Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" />
<Import Project="..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<Weavers> <Weavers>
<Costura IncludeDebugSymbols="false" /> <Costura IncludeDebugSymbols="false" />
</Weavers> </Weavers>

View File

@@ -16,6 +16,8 @@ namespace EveOPreview.UI
Action<IList<IThumbnailView>> ThumbnailsAdded { get; set; } Action<IList<IThumbnailView>> ThumbnailsAdded { get; set; }
Action<IList<IThumbnailView>> ThumbnailsUpdated { get; set; } Action<IList<IThumbnailView>> ThumbnailsUpdated { get; set; }
Action<IList<IThumbnailView>> ThumbnailsRemoved { get; set; } Action<IList<IThumbnailView>> ThumbnailsRemoved { get; set; }
Action<String, String, Point> ThumbnailPositionChanged { get; set; }
Action<Size> ThumbnailSizeChanged { get; set; } Action<Size> ThumbnailSizeChanged { get; set; }
} }
} }

View File

@@ -41,19 +41,22 @@ namespace EveOPreview.UI
this.View.ApplicationSettingsChanged = this.SaveApplicationSettings; this.View.ApplicationSettingsChanged = this.SaveApplicationSettings;
this.View.ThumbnailsSizeChanged = this.UpdateThumbnailsSize; this.View.ThumbnailsSizeChanged = this.UpdateThumbnailsSize;
this.View.ThumbnailStateChanged = this.UpdateThumbnailState; this.View.ThumbnailStateChanged = this.UpdateThumbnailState;
this.View.ForumUrlLinkActivated = this.OpenForumUrlLink; this.View.DocumentationLinkActivated = this.OpenDocumentationLink;
this.View.ApplicationExitRequested = this.ExitApplication; this.View.ApplicationExitRequested = this.ExitApplication;
this._thumbnailManager.ThumbnailsAdded = this.ThumbnailsAdded; this._thumbnailManager.ThumbnailsAdded = this.ThumbnailsAdded;
this._thumbnailManager.ThumbnailsUpdated = this.ThumbnailsUpdated; this._thumbnailManager.ThumbnailsUpdated = this.ThumbnailsUpdated;
this._thumbnailManager.ThumbnailsRemoved = this.ThumbnailsRemoved; this._thumbnailManager.ThumbnailsRemoved = this.ThumbnailsRemoved;
this._thumbnailManager.ThumbnailPositionChanged = this.ThumbnailPositionChanged;
this._thumbnailManager.ThumbnailSizeChanged = this.ThumbnailSizeChanged; this._thumbnailManager.ThumbnailSizeChanged = this.ThumbnailSizeChanged;
} }
private void Activate() private void Activate()
{ {
this.LoadApplicationSettings(); this.LoadApplicationSettings();
this.View.SetForumUrl(MainPresenter.ForumUrl); this.View.SetDocumentationUrl(MainPresenter.ForumUrl);
this.View.SetVersionInfo(this.GetApplicationVersion());
if (this._configuration.MinimizeToTray) if (this._configuration.MinimizeToTray)
{ {
this.View.Minimize(); this.View.Minimize();
@@ -206,6 +209,12 @@ namespace EveOPreview.UI
return thumbnailViews; 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) private void ThumbnailSizeChanged(Size size)
{ {
this.View.ThumbnailSize = size; this.View.ThumbnailSize = size;
@@ -216,12 +225,18 @@ namespace EveOPreview.UI
this._thumbnailManager.SetThumbnailState(thumbnailId, this._thumbnailDescriptionViews[thumbnailId].IsDisabled); this._thumbnailManager.SetThumbnailState(thumbnailId, this._thumbnailDescriptionViews[thumbnailId].IsDisabled);
} }
private void OpenForumUrlLink() private void OpenDocumentationLink()
{ {
ProcessStartInfo processStartInfo = new ProcessStartInfo(new Uri(MainPresenter.ForumUrl).AbsoluteUri); ProcessStartInfo processStartInfo = new ProcessStartInfo(new Uri(MainPresenter.ForumUrl).AbsoluteUri);
Process.Start(processStartInfo); Process.Start(processStartInfo);
} }
private string GetApplicationVersion()
{
Version version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
return String.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Revision);
}
private void ExitApplication() private void ExitApplication()
{ {
this._exitApplication = true; this._exitApplication = true;

View File

@@ -52,6 +52,8 @@ namespace EveOPreview.UI
public Action<IList<IThumbnailView>> ThumbnailsRemoved { get; set; } public Action<IList<IThumbnailView>> ThumbnailsRemoved { get; set; }
public Action<String, String, Point> ThumbnailPositionChanged { get; set; }
public Action<Size> ThumbnailSizeChanged { get; set; } public Action<Size> ThumbnailSizeChanged { get; set; }
public void Activate() public void Activate()
@@ -126,7 +128,7 @@ namespace EveOPreview.UI
if (!this._isHoverEffectActive) if (!this._isHoverEffectActive)
{ {
// Do not even move thumbnails with default caption // Do not even move thumbnails with default caption
if (view.Title != ThumbnailManager.DefaultClientTitle) if (this.IsManageableThumbnail(view))
{ {
view.ThumbnailLocation = this._configuration.GetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation); view.ThumbnailLocation = this._configuration.GetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation);
} }
@@ -216,7 +218,10 @@ namespace EveOPreview.UI
// Otherwise thumbnail window will be unnecessary resized // Otherwise thumbnail window will be unnecessary resized
view.SetSizeLimitations(this._configuration.ThumbnailMinimumSize, this._configuration.ThumbnailMaximumSize); view.SetSizeLimitations(this._configuration.ThumbnailMinimumSize, this._configuration.ThumbnailMaximumSize);
view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop); view.SetTopMost(this._configuration.ShowThumbnailsAlwaysOnTop);
view.ThumbnailLocation = this._configuration.GetThumbnailLocation(processTitle, this._activeClientTitle, view.ThumbnailLocation);
view.ThumbnailLocation = this.IsManageableThumbnail(view)
? this._configuration.GetThumbnailLocation(processTitle, this._activeClientTitle, view.ThumbnailLocation)
: this._configuration.GetDefaultThumbnailLocation();
this._thumbnailViews.Add(processHandle, view); this._thumbnailViews.Add(processHandle, view);
@@ -225,6 +230,7 @@ namespace EveOPreview.UI
view.ThumbnailFocused = this.ThumbnailViewFocused; view.ThumbnailFocused = this.ThumbnailViewFocused;
view.ThumbnailLostFocus = this.ThumbnailViewLostFocus; view.ThumbnailLostFocus = this.ThumbnailViewLostFocus;
view.ThumbnailActivated = this.ThumbnailActivated; view.ThumbnailActivated = this.ThumbnailActivated;
view.ThumbnailDeactivated = this.ThumbnailDeactivated;
view.RegisterHotkey(this._configuration.GetClientHotkey(processTitle)); view.RegisterHotkey(this._configuration.GetClientHotkey(processTitle));
@@ -351,6 +357,29 @@ namespace EveOPreview.UI
view?.Refresh(true); view?.Refresh(true);
} }
private void ThumbnailDeactivated(IntPtr id)
{
IThumbnailView view;
this._thumbnailViews.TryGetValue(id, out view);
if (view?.Id == this._activeClientHandle)
{
WindowManagerNativeMethods.SendMessage(view.Id, WindowManagerNativeMethods.WM_SYSCOMMAND, WindowManagerNativeMethods.SC_MINIMIZE, 0);
}
else
{
int style = WindowManagerNativeMethods.GetWindowLong(id, WindowManagerNativeMethods.GWL_STYLE);
// If the window is not already minimized then minimize it
if ((style & WindowManagerNativeMethods.WS_MINIMIZE) != WindowManagerNativeMethods.WS_MINIMIZE)
{
WindowManagerNativeMethods.ShowWindowAsync(id, WindowManagerNativeMethods.SW_SHOWMINIMIZED);
}
}
this.RefreshThumbnails();
}
private void ThumbnailViewResized(IntPtr id) private void ThumbnailViewResized(IntPtr id)
{ {
if (this._ignoreViewEvents) if (this._ignoreViewEvents)
@@ -374,7 +403,10 @@ namespace EveOPreview.UI
IThumbnailView view = this._thumbnailViews[id]; IThumbnailView view = this._thumbnailViews[id];
this._configuration.SetThumbnailLocation(view.Title, this._activeClientTitle, view.ThumbnailLocation); if (this.IsManageableThumbnail(view))
{
this.ThumbnailPositionChanged?.Invoke(view.Title, this._activeClientTitle, view.ThumbnailLocation);
}
view.Refresh(false); view.Refresh(false);
} }
@@ -458,5 +490,11 @@ namespace EveOPreview.UI
this._configuration.SetClientLayout(process.MainWindowTitle, clientLayout); this._configuration.SetClientLayout(process.MainWindowTitle, clientLayout);
} }
} }
// We should no manage some thumbnails (like thumbnail of the EVE client sitting on the login screen)
private bool IsManageableThumbnail(IThumbnailView view)
{
return view.Title != ThumbnailManager.DefaultClientTitle;
}
} }
} }

View File

@@ -27,15 +27,15 @@ namespace EveOPreview
return; return;
} }
ExceptionHandler handler = new ExceptionHandler();
handler.SetupExceptionHandlers();
Program.InitializeWinFormsGui(); Program.InitializeWinFormsGui();
IApplicationController controller = Program.InitializeApplicationController(); IApplicationController controller = Program.InitializeApplicationController();
Program.SetupApplicationConttroller(controller, Program.GetCustomConfigFile(args)); Program.SetupApplicationConttroller(controller, Program.GetCustomConfigFile(args));
controller.Run<MainPresenter>(); controller.Run<MainPresenter>();
token = null;
} }
private static string GetCustomConfigFile(string[] args) private static string GetCustomConfigFile(string[] args)

View File

@@ -12,7 +12,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
[assembly: Guid("04f08f8d-9e98-423b-acdb-4effb31c0d35")] [assembly: Guid("04f08f8d-9e98-423b-acdb-4effb31c0d35")]
[assembly: AssemblyVersion("2.2.0.0")] [assembly: AssemblyVersion("3.0.0.0")]
[assembly: AssemblyFileVersion("2.2.0.0")] [assembly: AssemblyFileVersion("3.0.0.0")]
[assembly: CLSCompliant(true)] [assembly: CLSCompliant(true)]

View File

@@ -59,15 +59,5 @@ namespace EveOPreview.Properties {
resourceCulture = value; resourceCulture = value;
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icon {
get {
object obj = ResourceManager.GetObject("icon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
} }
} }

View File

@@ -117,8 +117,4 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -34,22 +34,13 @@ namespace EveOPreview.UI
public bool MinimizeToTray public bool MinimizeToTray
{ {
get get => this.MinimizeToTrayCheckBox.Checked;
{ set => this.MinimizeToTrayCheckBox.Checked = value;
return this.MinimizeToTrayCheckBox.Checked;
}
set
{
this.MinimizeToTrayCheckBox.Checked = value;
}
} }
public double ThumbnailOpacity public double ThumbnailOpacity
{ {
get get => Math.Min(this.ThumbnailOpacityTrackBar.Value / 100.00, 1.00);
{
return Math.Min(this.ThumbnailOpacityTrackBar.Value / 100.00, 1.00);
}
set set
{ {
int barValue = (int)(100.0 * value); int barValue = (int)(100.0 * value);
@@ -68,70 +59,37 @@ namespace EveOPreview.UI
public bool EnableClientLayoutTracking public bool EnableClientLayoutTracking
{ {
get get => this.EnableClientLayoutTrackingCheckBox.Checked;
{ set => this.EnableClientLayoutTrackingCheckBox.Checked = value;
return this.EnableClientLayoutTrackingCheckBox.Checked;
}
set
{
this.EnableClientLayoutTrackingCheckBox.Checked = value;
}
} }
public bool HideActiveClientThumbnail public bool HideActiveClientThumbnail
{ {
get get => this.HideActiveClientThumbnailCheckBox.Checked;
{ set => this.HideActiveClientThumbnailCheckBox.Checked = value;
return this.HideActiveClientThumbnailCheckBox.Checked;
}
set
{
this.HideActiveClientThumbnailCheckBox.Checked = value;
}
} }
public bool ShowThumbnailsAlwaysOnTop public bool ShowThumbnailsAlwaysOnTop
{ {
get get => this.ShowThumbnailsAlwaysOnTopCheckBox.Checked;
{ set => this.ShowThumbnailsAlwaysOnTopCheckBox.Checked = value;
return this.ShowThumbnailsAlwaysOnTopCheckBox.Checked;
}
set
{
this.ShowThumbnailsAlwaysOnTopCheckBox.Checked = value;
}
} }
public bool HideThumbnailsOnLostFocus public bool HideThumbnailsOnLostFocus
{ {
get get => this.HideThumbnailsOnLostFocusCheckBox.Checked;
{ set => this.HideThumbnailsOnLostFocusCheckBox.Checked = value;
return this.HideThumbnailsOnLostFocusCheckBox.Checked;
}
set
{
this.HideThumbnailsOnLostFocusCheckBox.Checked = value;
}
} }
public bool EnablePerClientThumbnailLayouts public bool EnablePerClientThumbnailLayouts
{ {
get get => this.EnablePerClientThumbnailsLayoutsCheckBox.Checked;
{ set => this.EnablePerClientThumbnailsLayoutsCheckBox.Checked = value;
return this.EnablePerClientThumbnailsLayoutsCheckBox.Checked;
}
set
{
this.EnablePerClientThumbnailsLayoutsCheckBox.Checked = value;
}
} }
public Size ThumbnailSize public Size ThumbnailSize
{ {
get get => new Size((int)this.ThumbnailsWidthNumericEdit.Value, (int)this.ThumbnailsHeightNumericEdit.Value);
{
return new Size((int)this.ThumbnailsWidthNumericEdit.Value, (int)this.ThumbnailsHeightNumericEdit.Value);
}
set set
{ {
this.ThumbnailsWidthNumericEdit.Value = value.Width; this.ThumbnailsWidthNumericEdit.Value = value.Width;
@@ -141,10 +99,7 @@ namespace EveOPreview.UI
public bool EnableThumbnailZoom public bool EnableThumbnailZoom
{ {
get get => this.EnableThumbnailZoomCheckBox.Checked;
{
return this.EnableThumbnailZoomCheckBox.Checked;
}
set set
{ {
this.EnableThumbnailZoomCheckBox.Checked = value; this.EnableThumbnailZoomCheckBox.Checked = value;
@@ -154,14 +109,8 @@ namespace EveOPreview.UI
public int ThumbnailZoomFactor public int ThumbnailZoomFactor
{ {
get get => (int)this.ThumbnailZoomFactorNumericEdit.Value;
{ set => this.ThumbnailZoomFactorNumericEdit.Value = value;
return (int)this.ThumbnailZoomFactorNumericEdit.Value;
}
set
{
this.ThumbnailZoomFactorNumericEdit.Value = value;
}
} }
public ViewZoomAnchor ThumbnailZoomAnchor public ViewZoomAnchor ThumbnailZoomAnchor
@@ -196,46 +145,25 @@ namespace EveOPreview.UI
public bool ShowThumbnailOverlays public bool ShowThumbnailOverlays
{ {
get get => this.ShowThumbnailOverlaysCheckBox.Checked;
{ set => this.ShowThumbnailOverlaysCheckBox.Checked = value;
return this.ShowThumbnailOverlaysCheckBox.Checked;
}
set
{
this.ShowThumbnailOverlaysCheckBox.Checked = value;
}
} }
public bool ShowThumbnailFrames public bool ShowThumbnailFrames
{ {
get get => this.ShowThumbnailFramesCheckBox.Checked;
{ set => this.ShowThumbnailFramesCheckBox.Checked = value;
return this.ShowThumbnailFramesCheckBox.Checked;
}
set
{
this.ShowThumbnailFramesCheckBox.Checked = value;
}
} }
public bool EnableActiveClientHighlight public bool EnableActiveClientHighlight
{ {
get get => this.EnableActiveClientHighlightCheckBox.Checked;
{ set => this.EnableActiveClientHighlightCheckBox.Checked = value;
return this.EnableActiveClientHighlightCheckBox.Checked;
}
set
{
this.EnableActiveClientHighlightCheckBox.Checked = value;
}
} }
public Color ActiveClientHighlightColor public Color ActiveClientHighlightColor
{ {
get get => this._activeClientHighlightColor;
{
return this._activeClientHighlightColor;
}
set set
{ {
this._activeClientHighlightColor = value; this._activeClientHighlightColor = value;
@@ -267,9 +195,14 @@ namespace EveOPreview.UI
this.WindowState = FormWindowState.Minimized; this.WindowState = FormWindowState.Minimized;
} }
public void SetForumUrl(string url) public void SetVersionInfo(string version)
{ {
this.ForumLinkLabel.Text = url; this.VersionLabel.Text = version;
}
public void SetDocumentationUrl(string url)
{
this.DocumentationLink.Text = url;
} }
public void AddThumbnails(IList<IThumbnailDescriptionView> thumbnails) public void AddThumbnails(IList<IThumbnailDescriptionView> thumbnails)
@@ -336,9 +269,34 @@ namespace EveOPreview.UI
public Action<IntPtr> ThumbnailStateChanged { get; set; } public Action<IntPtr> ThumbnailStateChanged { get; set; }
public Action ForumUrlLinkActivated { get; set; } public Action DocumentationLinkActivated { get; set; }
#region UI events #region UI events
private void ContentTabControl_DrawItem(object sender, DrawItemEventArgs e)
{
TabControl control = (TabControl)sender;
TabPage page = control.TabPages[e.Index];
Rectangle bounds = control.GetTabRect(e.Index);
Graphics graphics = e.Graphics;
Brush textBrush = new SolidBrush(SystemColors.ActiveCaptionText);
Brush backgroundBrush = (e.State == DrawItemState.Selected)
? new SolidBrush(SystemColors.Control)
: new SolidBrush(SystemColors.ControlDark);
graphics.FillRectangle(backgroundBrush, e.Bounds);
// Use our own font
Font font = new Font("Arial", this.Font.Size * 1.2f, FontStyle.Bold, GraphicsUnit.Pixel);
// Draw string and center the text
StringFormat stringFlags = new StringFormat();
stringFlags.Alignment = StringAlignment.Center;
stringFlags.LineAlignment = StringAlignment.Center;
graphics.DrawString(page.Text, font, textBrush, bounds, stringFlags);
}
private void OptionChanged_Handler(object sender, EventArgs e) private void OptionChanged_Handler(object sender, EventArgs e)
{ {
if (this._suppressEvents) if (this._suppressEvents)
@@ -396,9 +354,9 @@ namespace EveOPreview.UI
this.ThumbnailStateChanged?.Invoke(selectedItem.Id); this.ThumbnailStateChanged?.Invoke(selectedItem.Id);
} }
private void ForumLinkLabelClicked_Handler(object sender, LinkLabelLinkClickedEventArgs e) private void DocumentationLinkClicked_Handler(object sender, LinkLabelLinkClickedEventArgs e)
{ {
this.ForumUrlLinkActivated?.Invoke(); this.DocumentationLinkActivated?.Invoke();
} }
private void MainFormResize_Handler(object sender, EventArgs e) private void MainFormResize_Handler(object sender, EventArgs e)

File diff suppressed because it is too large Load Diff

View File

@@ -58,10 +58,7 @@ namespace EveOPreview.UI
public string Title public string Title
{ {
get get => this.Text;
{
return this.Text;
}
set set
{ {
this.Text = value; this.Text = value;
@@ -77,10 +74,7 @@ namespace EveOPreview.UI
public Point ThumbnailLocation public Point ThumbnailLocation
{ {
get get => this.Location;
{
return this.Location;
}
set set
{ {
if ((value.X > 0) || (value.Y > 0)) if ((value.X > 0) || (value.Y > 0))
@@ -93,14 +87,8 @@ namespace EveOPreview.UI
public Size ThumbnailSize public Size ThumbnailSize
{ {
get get => this.ClientSize;
{ set => this.ClientSize = value;
return this.ClientSize;
}
set
{
this.ClientSize = value;
}
} }
public Action<IntPtr> ThumbnailResized { get; set; } public Action<IntPtr> ThumbnailResized { get; set; }
@@ -113,6 +101,8 @@ namespace EveOPreview.UI
public Action<IntPtr> ThumbnailActivated { get; set; } public Action<IntPtr> ThumbnailActivated { get; set; }
public Action<IntPtr> ThumbnailDeactivated { get; set; }
public new void Show() public new void Show()
{ {
base.Show(); base.Show();
@@ -446,9 +436,16 @@ namespace EveOPreview.UI
private void MouseDown_Handler(object sender, MouseEventArgs e) private void MouseDown_Handler(object sender, MouseEventArgs e)
{ {
if (e.Button == MouseButtons.Left) if (e.Button == MouseButtons.Left)
{
if (Control.ModifierKeys == Keys.Control)
{
this.ThumbnailDeactivated?.Invoke(this.Id);
}
else
{ {
this.ThumbnailActivated?.Invoke(this.Id); this.ThumbnailActivated?.Invoke(this.Id);
} }
}
if ((e.Button == MouseButtons.Right) || (e.Button == (MouseButtons.Left | MouseButtons.Right))) if ((e.Button == MouseButtons.Right) || (e.Button == (MouseButtons.Left | MouseButtons.Right)))
{ {

View File

@@ -32,7 +32,8 @@ namespace EveOPreview.UI
bool EnableActiveClientHighlight { get; set; } bool EnableActiveClientHighlight { get; set; }
Color ActiveClientHighlightColor { get; set; } Color ActiveClientHighlightColor { get; set; }
void SetForumUrl(string url); void SetDocumentationUrl(string url);
void SetVersionInfo(string version);
void SetThumbnailSizeLimitations(Size minimumSize, Size maximumSize); void SetThumbnailSizeLimitations(Size minimumSize, Size maximumSize);
void Minimize(); void Minimize();
@@ -49,6 +50,6 @@ namespace EveOPreview.UI
Action ApplicationSettingsChanged { get; set; } Action ApplicationSettingsChanged { get; set; }
Action ThumbnailsSizeChanged { get; set; } Action ThumbnailsSizeChanged { get; set; }
Action<IntPtr> ThumbnailStateChanged { get; set; } Action<IntPtr> ThumbnailStateChanged { get; set; }
Action ForumUrlLinkActivated { get; set; } Action DocumentationLinkActivated { get; set; }
} }
} }

View File

@@ -35,6 +35,8 @@ namespace EveOPreview.UI
Action<IntPtr> ThumbnailMoved { get; set; } Action<IntPtr> ThumbnailMoved { get; set; }
Action<IntPtr> ThumbnailFocused { get; set; } Action<IntPtr> ThumbnailFocused { get; set; }
Action<IntPtr> ThumbnailLostFocus { get; set; } Action<IntPtr> ThumbnailLostFocus { get; set; }
Action<IntPtr> ThumbnailActivated { get; set; } Action<IntPtr> ThumbnailActivated { get; set; }
Action<IntPtr> ThumbnailDeactivated { get; set; }
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Costura.Fody" version="1.3.3.0" targetFramework="net45" developmentDependency="true" /> <package id="Costura.Fody" version="1.6.2" targetFramework="net45" developmentDependency="true" />
<package id="Fody" version="1.29.4" targetFramework="net45" developmentDependency="true" /> <package id="Fody" version="2.1.0" targetFramework="net45" developmentDependency="true" />
<package id="LightInject" version="4.0.9" targetFramework="net45" /> <package id="LightInject" version="5.0.3" targetFramework="net45" />
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net45" /> <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
</packages> </packages>

View File

@@ -10,7 +10,7 @@ The program does NOT (and will NOT ever) do the following things:
* broadcast any keyboard or mouse events * broadcast any keyboard or mouse events
* anyhow interact with EVE Online except of bringing its main window to foreground or resizing it * anyhow interact with EVE Online except of bringing its main window to foreground or resizing it
Under any conditions you should NOT use EVE-O Preview for any actions that break EULA or ToS of EVE Online. **Under any conditions you should NOT use EVE-O Preview for any actions that break EULA or ToS of EVE Online.**
If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail.
@@ -54,25 +54,25 @@ CCP FoxFour wrote:
## Application Options Available Via GUI ## Application Options Available Via GUI
| Option | Description | | Tab | Option | Description |
| --- | --- | | --- | --- | --- |
| Minimize to System Tray | Determines whether the main window form be minimized to windows tray when it is closed | | **General** | Minimize to System Tray | Determines whether the main window form be minimized to windows tray when it is closed |
| Opacity | Determines the inactive EVE thumbnails opacity (from almost invisible 20% to 100% solid) | | General | Track client locations | Determines whether the client's window position should be restored when it is activated or started |
| Track client locations | Determines whether the client's window position should be restored when it is activated or started | | General | Hide preview of active EVE client | Determines whether the thumbnail corresponding to the active EVE client is not displayed |
| Hide preview of active EVE client | Determines whether the thumbnail corresponding to the active EVE client is not displayed | | General | Previews always on top | Determines whether EVE client thumbnails should stay on top of all other windows |
| Previews always on top | Determines whether EVE client thumbnails should stay on top of all other windows | | General | Hide previews when EVE client is not active | Determines whether all thumbnails should be visible only when an EVE client is active |
| Hide previews when EVE client is not active | Determines whether all thumbnails should be visible only when an EVE client is active | | General | Unique layout for each EVE client | Determines whether thumbnails positions are different depending on the EVE client being active (f.e. links char have thumbnails of the Falcon and DPS char in the right bottom corner while DPS and Falcon alts have them placed at the top of the main EVE window ) |
| Unique layout for each EVE client | Determines whether thumbnails positions are different depending on the EVE client being active (f.e. links char have thumbnails of the Falcon and DPS char in the right bottom corner while DPS and Falcon alts have them placed at the top of the main EVE window ) | | **Thumbnail** | Opacity | Determines the inactive EVE thumbnails opacity (from almost invisible 20% to 100% solid) |
| Thumbnail width | Thumbnails width. Can be set to any value from **100** to **640** points | | Thumbnail | Thumbnail Width | Thumbnails width. Can be set to any value from **100** to **640** points |
| Thumbnail height | Thumbnails Height. Can be set to any value from **80** to **400** points | | Thumbnail | Thumbnail Height | Thumbnails Height. Can be set to any value from **80** to **400** points |
| Zoom on hover | Determines whether a thumbnail should be zoomed when the mouse pointer is over it | | **Zoom** | Zoom on hover | Determines whether a thumbnail should be zoomed when the mouse pointer is over it |
| Zoom factor | Thumbnail zoom factor. Can be set to any value from **2** to **10** | | Zoom | Zoom factor | Thumbnail zoom factor. Can be set to any value from **2** to **10** |
| Zoom anchor | Sets the starting point of the thumbnail zoom | | Zoom | Zoom anchor | Sets the starting point of the thumbnail zoom |
| Show overlay | Determines whether a name of the corresponding EVE cliet should be displayed on the thumbnail | | **Overlay** | Show overlay | Determines whether a name of the corresponding EVE cliet should be displayed on the thumbnail |
| Show frames | Determines whether thumbnails should be displayd with window caption and borders | | Overlay | Show frames | Determines whether thumbnails should be displayd with window caption and borders |
| Highlight active client | Determines whether the thumbnail of the active EVE client should be highlighted with a bright border | | Overlay | Highlight active client | Determines whether the thumbnail of the active EVE client should be highlighted with a bright border |
| Color | Color used to highlight the active client's thumbnail in case the corresponding option is set | | Overlay | Color | Color used to highlight the active client's thumbnail in case the corresponding option is set |
| Thumbnails list | List of currently active EVE client thumbnails. Checking an element in this list will hide the corresponding thumbnail. However these checks are not persisted and on the next EVE client or EVE-O Preview run the thumbnail will be visible again | | **Active Clients** | Thumbnails list | List of currently active EVE client thumbnails. Checking an element in this list will hide the corresponding thumbnail. However these checks are not persisted and on the next EVE client or EVE-O Preview run the thumbnail will be visible again |
## Mouse Gestures ## Mouse Gestures