Added format type to save options
Changed crosshair size to be used instead of show Added readonly config file support
This commit is contained in:
parent
a382ab8dad
commit
5fa20668db
@ -4,6 +4,11 @@
|
||||
{
|
||||
public int Version { get; set; } = 1;
|
||||
|
||||
public string Format { get; set; } = "suzumagnifier";
|
||||
|
||||
public bool ReadOnly { get; set; } = false;
|
||||
|
||||
|
||||
public bool AutoStart { get; set; }
|
||||
|
||||
public bool HighQuality { get; set; }
|
||||
@ -16,10 +21,9 @@
|
||||
|
||||
public int CrosshairSize { get; set; }
|
||||
|
||||
public Color CrosshairColour { get; set; }
|
||||
public string? CrosshairColour { get; set; }
|
||||
|
||||
public bool ShowAlwaysOnTop { get; set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
40
source/Form1.Designer.cs
generated
40
source/Form1.Designer.cs
generated
@ -44,8 +44,6 @@
|
||||
toolStripSeparator3 = new ToolStripSeparator();
|
||||
resetToolStripMenuItem = new ToolStripMenuItem();
|
||||
toolStripMenuItem9 = new ToolStripMenuItem();
|
||||
showToolStripMenuItem = new ToolStripMenuItem();
|
||||
toolStripSeparator5 = new ToolStripSeparator();
|
||||
sizeToolStripMenuItem = new ToolStripMenuItem();
|
||||
smallToolStripMenuItem = new ToolStripMenuItem();
|
||||
mediumToolStripMenuItem = new ToolStripMenuItem();
|
||||
@ -67,6 +65,8 @@
|
||||
aboutToolStripMenuItem = new ToolStripMenuItem();
|
||||
toolStripSeparator6 = new ToolStripSeparator();
|
||||
exitiToolStripMenuItem = new ToolStripMenuItem();
|
||||
toolStripMenuItem11 = new ToolStripMenuItem();
|
||||
toolStripSeparator7 = new ToolStripSeparator();
|
||||
contextMenuStrip1.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
@ -115,14 +115,14 @@
|
||||
// fasterToolStripMenuItem
|
||||
//
|
||||
fasterToolStripMenuItem.Name = "fasterToolStripMenuItem";
|
||||
fasterToolStripMenuItem.Size = new Size(180, 22);
|
||||
fasterToolStripMenuItem.Size = new Size(100, 22);
|
||||
fasterToolStripMenuItem.Text = "&Fast";
|
||||
fasterToolStripMenuItem.Click += fastToolStripMenuItem_Click;
|
||||
//
|
||||
// highToolStripMenuItem
|
||||
//
|
||||
highToolStripMenuItem.Name = "highToolStripMenuItem";
|
||||
highToolStripMenuItem.Size = new Size(180, 22);
|
||||
highToolStripMenuItem.Size = new Size(100, 22);
|
||||
highToolStripMenuItem.Text = "&High";
|
||||
highToolStripMenuItem.Click += highToolStripMenuItem_Click;
|
||||
//
|
||||
@ -165,27 +165,15 @@
|
||||
//
|
||||
// toolStripMenuItem9
|
||||
//
|
||||
toolStripMenuItem9.DropDownItems.AddRange(new ToolStripItem[] { showToolStripMenuItem, toolStripSeparator5, sizeToolStripMenuItem, colourToolStripMenuItem });
|
||||
toolStripMenuItem9.DropDownItems.AddRange(new ToolStripItem[] { sizeToolStripMenuItem, colourToolStripMenuItem });
|
||||
toolStripMenuItem9.Image = Resource1.crosshair;
|
||||
toolStripMenuItem9.Name = "toolStripMenuItem9";
|
||||
toolStripMenuItem9.Size = new Size(204, 22);
|
||||
toolStripMenuItem9.Text = "Crosshair";
|
||||
//
|
||||
// showToolStripMenuItem
|
||||
//
|
||||
showToolStripMenuItem.Name = "showToolStripMenuItem";
|
||||
showToolStripMenuItem.Size = new Size(180, 22);
|
||||
showToolStripMenuItem.Text = "Show";
|
||||
showToolStripMenuItem.Click += showToolStripMenuItem_Click;
|
||||
//
|
||||
// toolStripSeparator5
|
||||
//
|
||||
toolStripSeparator5.Name = "toolStripSeparator5";
|
||||
toolStripSeparator5.Size = new Size(177, 6);
|
||||
//
|
||||
// sizeToolStripMenuItem
|
||||
//
|
||||
sizeToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { smallToolStripMenuItem, mediumToolStripMenuItem, largeToolStripMenuItem });
|
||||
sizeToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem11, toolStripSeparator7, smallToolStripMenuItem, mediumToolStripMenuItem, largeToolStripMenuItem });
|
||||
sizeToolStripMenuItem.Name = "sizeToolStripMenuItem";
|
||||
sizeToolStripMenuItem.Size = new Size(180, 22);
|
||||
sizeToolStripMenuItem.Text = "Size";
|
||||
@ -329,6 +317,18 @@
|
||||
exitiToolStripMenuItem.Text = "E&xit";
|
||||
exitiToolStripMenuItem.Click += exitiToolStripMenuItem_Click;
|
||||
//
|
||||
// toolStripMenuItem11
|
||||
//
|
||||
toolStripMenuItem11.Name = "toolStripMenuItem11";
|
||||
toolStripMenuItem11.Size = new Size(180, 22);
|
||||
toolStripMenuItem11.Text = "None";
|
||||
toolStripMenuItem11.Click += toolStripMenuItem11_Click;
|
||||
//
|
||||
// toolStripSeparator7
|
||||
//
|
||||
toolStripSeparator7.Name = "toolStripSeparator7";
|
||||
toolStripSeparator7.Size = new Size(177, 6);
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(96F, 96F);
|
||||
@ -364,10 +364,8 @@
|
||||
private ToolStripMenuItem resetToolStripMenuItem;
|
||||
private ToolStripSeparator toolStripSeparator4;
|
||||
private ToolStripMenuItem toolStripMenuItem9;
|
||||
private ToolStripMenuItem showToolStripMenuItem;
|
||||
private ToolStripMenuItem sizeToolStripMenuItem;
|
||||
private ToolStripMenuItem colourToolStripMenuItem;
|
||||
private ToolStripSeparator toolStripSeparator5;
|
||||
private ToolStripMenuItem smallToolStripMenuItem;
|
||||
private ToolStripMenuItem mediumToolStripMenuItem;
|
||||
private ToolStripMenuItem largeToolStripMenuItem;
|
||||
@ -382,5 +380,7 @@
|
||||
private ToolStripMenuItem viewHelpToolStripMenuItem;
|
||||
private ToolStripMenuItem aboutToolStripMenuItem;
|
||||
private ToolStripSeparator toolStripSeparator6;
|
||||
private ToolStripMenuItem toolStripMenuItem11;
|
||||
private ToolStripSeparator toolStripSeparator7;
|
||||
}
|
||||
}
|
||||
|
||||
149
source/Form1.cs
149
source/Form1.cs
@ -28,7 +28,7 @@ namespace SuzuMagnifier
|
||||
|
||||
private readonly System.Windows.Forms.Timer _timer = new();
|
||||
private Bitmap? _bitmap;
|
||||
private string jsonfigFilename;
|
||||
private string _jsonfigFilename;
|
||||
|
||||
|
||||
public Form1()
|
||||
@ -53,27 +53,31 @@ namespace SuzuMagnifier
|
||||
|
||||
var args = GetCommandLine()!;
|
||||
|
||||
jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault();
|
||||
if (string.IsNullOrWhiteSpace(jsonfigFilename))
|
||||
_jsonfigFilename = args.Where(x => (x.Key.Equals("o") || x.Key.Equals("open"))).Select(x => x.Value).FirstOrDefault();
|
||||
if (string.IsNullOrWhiteSpace(_jsonfigFilename))
|
||||
{
|
||||
jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
|
||||
_jsonfigFilename = Path.ChangeExtension(Application.ExecutablePath, "jsonfig");
|
||||
}
|
||||
|
||||
if (System.IO.File.Exists(jsonfigFilename))
|
||||
if (System.IO.File.Exists(_jsonfigFilename))
|
||||
{
|
||||
var newSettings = await LoadSettings(jsonfigFilename);
|
||||
if (newSettings == null)
|
||||
this.SavedOptions = await LoadSettings(_jsonfigFilename);
|
||||
|
||||
this.TopMost = this.SavedOptions!.ShowAlwaysOnTop;
|
||||
this.HighQuality = this.SavedOptions.HighQuality;
|
||||
this.ZoomFactor = this.SavedOptions.ZoomFactor;
|
||||
this.UpdateFrequency = this.SavedOptions.UpdateFrequency;
|
||||
this.CrosshairSize = this.SavedOptions.CrosshairSize;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(this.SavedOptions.CrosshairColour))
|
||||
{
|
||||
newSettings = new SavedOptions();
|
||||
this.CrosshairColour = ColorTranslator.FromHtml(this.SavedOptions!.CrosshairColour);
|
||||
}
|
||||
|
||||
this.TopMost = newSettings.ShowAlwaysOnTop;
|
||||
this.HighQuality = newSettings.HighQuality;
|
||||
this.ZoomFactor = newSettings.ZoomFactor;
|
||||
//this.UpdateFrequency = newSettings.UpdateFrequency;
|
||||
this.ShowCrosshair = newSettings.ShowCrosshair;
|
||||
this.CrosshairSize = newSettings.CrosshairSize;
|
||||
this.CrosshairColour = newSettings.CrosshairColour;
|
||||
if (this.SavedOptions!.AutoStart)
|
||||
{
|
||||
_timer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +120,7 @@ namespace SuzuMagnifier
|
||||
g.DrawImage(_bitmap, this.ClientRectangle);
|
||||
|
||||
// Draw center crosshair
|
||||
if (this.ShowCrosshair)
|
||||
if (this.CrosshairSize > 0)
|
||||
{
|
||||
var cx = Divide(this.Width, 2);
|
||||
var cy = Divide(this.Height, 2);
|
||||
@ -181,10 +185,15 @@ namespace SuzuMagnifier
|
||||
{
|
||||
base.OnFormClosing(e);
|
||||
|
||||
if (this.SavedOptions.ReadOnly)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var result = MessageBox.Show("Do you want to save settings to file?", "Save Settings?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
var result2 = await SaveSettings(jsonfigFilename);
|
||||
var result2 = await SaveSettings(_jsonfigFilename);
|
||||
if (result2)
|
||||
{
|
||||
return;
|
||||
@ -205,58 +214,20 @@ namespace SuzuMagnifier
|
||||
}
|
||||
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public SavedOptions SavedOptions { get => field ?? new SavedOptions(); private set => field = value; }
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public bool HighQuality { get; set; } = false;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public int ZoomFactor
|
||||
{
|
||||
get => field;
|
||||
set
|
||||
{
|
||||
if (value < 0)
|
||||
{
|
||||
field = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (value > 20)
|
||||
{
|
||||
field = 20;
|
||||
return;
|
||||
}
|
||||
|
||||
field = value;
|
||||
}
|
||||
} = 2;
|
||||
public int ZoomFactor { get => field; set => field = Math.Clamp(value, 1, 20); } = 2;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public int UpdateFrequency { get; set; } = 33;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public bool ShowCrosshair { get; set; } = true;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public int CrosshairSize
|
||||
{
|
||||
get => field;
|
||||
set
|
||||
{
|
||||
if (value < 5)
|
||||
{
|
||||
field = 5;
|
||||
return;
|
||||
}
|
||||
|
||||
if (value > 200)
|
||||
{
|
||||
field = 200;
|
||||
return;
|
||||
}
|
||||
|
||||
field = value;
|
||||
}
|
||||
} = 20;
|
||||
public int CrosshairSize { get => field; set => field = Math.Clamp(value, 0, 200); } = 20;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public Color CrosshairColour { get; set; } = Color.FromArgb(255, 255, 0);
|
||||
@ -269,18 +240,20 @@ namespace SuzuMagnifier
|
||||
|
||||
toolStripMenuItem5.Checked = this.TopMost;
|
||||
|
||||
showToolStripMenuItem.Checked = this.ShowCrosshair;
|
||||
toolStripMenuItem11.Checked = (this.CrosshairSize == 0);
|
||||
smallToolStripMenuItem.Checked = (this.CrosshairSize == 10);
|
||||
mediumToolStripMenuItem.Checked = (this.CrosshairSize == 20);
|
||||
largeToolStripMenuItem.Checked = (this.CrosshairSize == 50);
|
||||
|
||||
agentaToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 255);
|
||||
cyanToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 255);
|
||||
yellowToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 0);
|
||||
greenToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 255, 0);
|
||||
redToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 0, 0);
|
||||
blackToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(0, 0, 0);
|
||||
whiteToolStripMenuItem.Checked = this.CrosshairColour == Color.FromArgb(255, 255, 255);
|
||||
resetToolStripMenuItem.Checked = (this.ZoomFactor == 1);
|
||||
|
||||
agentaToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 0, 255));
|
||||
cyanToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 255, 255));
|
||||
yellowToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 255, 0));
|
||||
greenToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 255, 0));
|
||||
redToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 0, 0));
|
||||
blackToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(0, 0, 0));
|
||||
whiteToolStripMenuItem.Checked = (this.CrosshairColour == Color.FromArgb(255, 255, 255));
|
||||
|
||||
fasterToolStripMenuItem.Checked = !this.HighQuality;
|
||||
fasterToolStripMenuItem.Enabled = this.HighQuality;
|
||||
@ -525,17 +498,17 @@ namespace SuzuMagnifier
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Crosshair, toggle
|
||||
/// Crosshair, size, off
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void showToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
private void toolStripMenuItem11_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.ShowCrosshair = !this.ShowCrosshair;
|
||||
this.CrosshairSize = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Croisshair, size, small
|
||||
/// Crosshair, size, small
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
@ -545,7 +518,7 @@ namespace SuzuMagnifier
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Croisshair, size, medium
|
||||
/// Crosshair, size, medium
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
@ -555,7 +528,7 @@ namespace SuzuMagnifier
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Croisshair, size, large
|
||||
/// Crosshair, size, large
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
@ -662,32 +635,38 @@ namespace SuzuMagnifier
|
||||
return null;
|
||||
}
|
||||
|
||||
SavedOptions response;
|
||||
try
|
||||
{
|
||||
return System.Text.Json.JsonSerializer.Deserialize<SavedOptions>(sourceCode);
|
||||
response = System.Text.Json.JsonSerializer.Deserialize<SavedOptions>(sourceCode);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!response!.Format.Equals(Resource1.FileFormat, StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
private async Task<bool> SaveSettings(string filename)
|
||||
{
|
||||
var result = new SavedOptions();
|
||||
result.AutoStart = false;
|
||||
result.HighQuality = this.HighQuality;
|
||||
result.ZoomFactor = this.ZoomFactor;
|
||||
result.UpdateFrequency = this.UpdateFrequency;
|
||||
result.ShowCrosshair = this.ShowCrosshair;
|
||||
result.CrosshairSize = this.CrosshairSize;
|
||||
result.CrosshairColour = this.CrosshairColour;
|
||||
result.ShowAlwaysOnTop = this.TopMost;
|
||||
//_savedOptions.AutoStart = false;
|
||||
this.SavedOptions.HighQuality = this.HighQuality;
|
||||
this.SavedOptions.ZoomFactor = this.ZoomFactor;
|
||||
this.SavedOptions.UpdateFrequency = this.UpdateFrequency;
|
||||
this.SavedOptions.CrosshairSize = this.CrosshairSize;
|
||||
this.SavedOptions.CrosshairColour = $"#{this.CrosshairColour.R:X2}{this.CrosshairColour.G:X2}{this.CrosshairColour.B:X2}";
|
||||
this.SavedOptions.ShowAlwaysOnTop = this.TopMost;
|
||||
|
||||
string sourceCode = "";
|
||||
try
|
||||
{
|
||||
sourceCode = System.Text.Json.JsonSerializer.Serialize(result);
|
||||
sourceCode = System.Text.Json.JsonSerializer.Serialize(this.SavedOptions);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
9
source/Resource1.Designer.cs
generated
9
source/Resource1.Designer.cs
generated
@ -79,6 +79,15 @@ namespace SuzuMagnifier {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to suzumagnifier.
|
||||
/// </summary>
|
||||
internal static string FileFormat {
|
||||
get {
|
||||
return ResourceManager.GetString("FileFormat", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
||||
@ -124,6 +124,9 @@
|
||||
<data name="crosshair" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>Resources\crosshair.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="FileFormat" xml:space="preserve">
|
||||
<value>suzumagnifier</value>
|
||||
</data>
|
||||
<data name="fullscreen" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>Resources\fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Title>Suzu Magnifier</Title>
|
||||
<Version>0.1.0.148</Version>
|
||||
<Version>0.1.0.202</Version>
|
||||
<Product>Suzu Magnifier</Product>
|
||||
<Company>Hi, I'm Ray</Company>
|
||||
<Authors>Ray Lam</Authors>
|
||||
@ -15,11 +15,11 @@
|
||||
<NoWin32Manifest>true</NoWin32Manifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebugType>none</DebugType>
|
||||
<DebugType>full</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<DebugType>none</DebugType>
|
||||
<DebugType>full</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user