diff --git a/Pilz.Cryptography/IUniquieIDHost.cs b/Pilz.Cryptography/IUniquieIDHost.cs
new file mode 100644
index 0000000..d391edb
--- /dev/null
+++ b/Pilz.Cryptography/IUniquieIDHost.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Pilz.Cryptography
+{
+ ///
+ /// Can be implemented on objects that provides an UniquieID.
+ ///
+ public interface IUniquieIDHost
+ {
+ UniquieID ID { get; }
+ }
+}
diff --git a/Pilz.Cryptography/UniquiIDStringJsonConverter.cs b/Pilz.Cryptography/Json.Converters/UniquieIDStringJsonConverter.cs
similarity index 55%
rename from Pilz.Cryptography/UniquiIDStringJsonConverter.cs
rename to Pilz.Cryptography/Json.Converters/UniquieIDStringJsonConverter.cs
index 128f4f4..f3725ab 100644
--- a/Pilz.Cryptography/UniquiIDStringJsonConverter.cs
+++ b/Pilz.Cryptography/Json.Converters/UniquieIDStringJsonConverter.cs
@@ -2,30 +2,28 @@
using Pilz.Cryptography;
using System;
using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Linq;
using System.Text;
-using System.Threading.Tasks;
namespace Pilz.Json.Converters
{
- public class UniquiIDStringJsonConverter : JsonConverter
+ public class UniquieIDStringJsonConverter : JsonConverter
{
+ public static bool EnableCheckForDepricatedTypes { get; set; } = true;
+
public override bool CanConvert(Type objectType)
{
- return typeof(UniquieID).IsAssignableFrom(objectType);
+ return typeof(UniquieID).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var idString = serializer.Deserialize(reader);
- UniquieID id;
+ UniquieID id;
- if (existingValue is object)
- id = (UniquieID)existingValue;
+ if (existingValue is UniquieID existingID && (!EnableCheckForDepricatedTypes || existingID.GetType() == typeof(UniquieID)))
+ id = existingID;
else
- id = new UniquieID();
+ id = new UniquieID();
id.ID = idString;
@@ -34,7 +32,7 @@ namespace Pilz.Json.Converters
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
- serializer.Serialize(writer, ((UniquieID)value).ID);
+ serializer.Serialize(writer, ((UniquieID)value).ID);
}
}
}
diff --git a/Pilz.Cryptography/UniquieID.cs b/Pilz.Cryptography/UniquieID.cs
index dad0034..e493013 100644
--- a/Pilz.Cryptography/UniquieID.cs
+++ b/Pilz.Cryptography/UniquieID.cs
@@ -1,23 +1,31 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
-using System.Linq;
using System.Management;
using System.Security.Cryptography;
using System.Text;
-using System.Threading.Tasks;
namespace Pilz.Cryptography
{
- public class UniquieID : IUniquieID
+ [JsonConverter(typeof(Json.Converters.UniquieIDStringJsonConverter))]
+ public class UniquieID : IUniquieID
{
- private static int currentSimpleID = 0;
+ protected static ulong currentSimpleID = 0;
[JsonProperty(nameof(ID))]
- private string _iD;
+ protected string _iD;
[JsonIgnore]
- public string ID
+ public virtual bool SimpleMode { get; }
+
+ [JsonIgnore]
+ public virtual bool GenerateOnGet { get; }
+
+ [JsonIgnore]
+ public virtual bool HasID => !string.IsNullOrEmpty(_iD);
+
+ [JsonIgnore]
+ public virtual string ID
{
get
{
@@ -29,36 +37,96 @@ namespace Pilz.Cryptography
=> _iD = value;
}
- [JsonIgnore]
- public bool HasID { get => !string.IsNullOrEmpty(_iD); }
- [JsonIgnore]
- public bool SimpleMode { get; set; } = false;
- [JsonIgnore]
- public bool GenerateOnGet { get; set; } = false;
-
- public UniquieID() : this(false)
+ public UniquieID() : this(UniquieIDGenerationMode.None)
{
}
- public UniquieID(bool autoGenerate)
+ public UniquieID(UniquieIDGenerationMode mode) : this(mode, false)
{
- if (autoGenerate)
+ }
+
+ public UniquieID(UniquieIDGenerationMode mode, bool simpleMode)
+ {
+ SimpleMode = simpleMode;
+
+ if (mode == UniquieIDGenerationMode.GenerateOnInit)
GenerateIfNull();
+ else if (mode == UniquieIDGenerationMode.GenerateOnGet)
+ GenerateOnGet = true;
}
- public void Generate()
+ [Obsolete]
+ public UniquieID(bool autoGenerate) : this(autoGenerate ? UniquieIDGenerationMode.GenerateOnInit : UniquieIDGenerationMode.None)
+ {
+ }
+
+ public virtual void Generate()
{
if (SimpleMode)
- ID = typeof(TargetType).ToString() + currentSimpleID++.ToString();
+ ID = GenerateSimple();
else
- ID = GenerateUniquieID(string.Empty);
+ ID = GenerateDefault();
}
- public void GenerateIfNull()
+
+ protected virtual string GenerateSimple()
+ {
+ return new Random().Next().ToString() + DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + currentSimpleID++.ToString();
+ }
+
+ protected virtual string GenerateDefault()
+ {
+ return GenerateUniquieID(currentSimpleID++.ToString());
+ }
+
+ public virtual void GenerateIfNull()
{
if (!HasID) Generate();
}
- private static string GenerateUniquieID(string var)
+ public override string ToString()
+ {
+ return ID;
+ }
+
+ public override int GetHashCode()
+ {
+ return -1430039477 + EqualityComparer.Default.GetHashCode(_iD);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is UniquieID iD)
+ {
+ if (ReferenceEquals(obj, iD))
+ return true;
+ else
+ {
+ var leftHasID = iD.HasID;
+ var rightHasID = HasID;
+
+ if (!leftHasID && iD.GenerateOnGet)
+ {
+ iD.Generate();
+ leftHasID = iD.HasID;
+ }
+
+ if (!rightHasID && GenerateOnGet)
+ {
+ Generate();
+ rightHasID = HasID;
+ }
+
+ if (leftHasID && rightHasID)
+ return _iD.Equals(iD._iD);
+ }
+ }
+
+ return base.Equals(obj);
+ }
+
+ #region Statics for Generation
+
+ protected static string GenerateUniquieID(string var)
{
var sn = TryGetSerialNumberOfFirstHardDrive();
var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff");
@@ -88,56 +156,17 @@ namespace Pilz.Cryptography
Win32_PhysicalMedia_SerialNumber = sn;
}
-
+
return Win32_PhysicalMedia_SerialNumber;
}
- public override string ToString() => ID;
+ #endregion
- public override bool Equals(object obj)
- {
- var res = false;
- var iD = obj as UniquieID;
+ public static implicit operator string(UniquieID id) => id.ID;
+ public static implicit operator UniquieID(string id) => new UniquieID() { ID = id };
+ public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) };
- if (iD is object)
- {
- if (ReferenceEquals(res, iD))
- res = true;
- else
- {
- var leftHasID = iD.HasID;
- var rightHasID = HasID;
-
- if (!leftHasID && iD.GenerateOnGet)
- {
- iD.Generate();
- leftHasID = iD.HasID;
- }
-
- if (!rightHasID && GenerateOnGet)
- {
- Generate();
- rightHasID = HasID;
- }
-
- if (leftHasID && rightHasID)
- res = _iD.Equals(iD._iD);
- }
- }
-
- return res;
- }
-
- public override int GetHashCode()
- {
- return -1430039477 + EqualityComparer.Default.GetHashCode(_iD);
- }
-
- public static implicit operator string(UniquieID id) => id.ID;
- public static implicit operator UniquieID(string id) => new UniquieID() { ID = id };
- public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) };
-
- public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
- public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
+ public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
+ public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
}
}
diff --git a/Pilz.Cryptography/UniquieIDGenerationMode.cs b/Pilz.Cryptography/UniquieIDGenerationMode.cs
new file mode 100644
index 0000000..d7f0c34
--- /dev/null
+++ b/Pilz.Cryptography/UniquieIDGenerationMode.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Pilz.Cryptography
+{
+ public enum UniquieIDGenerationMode
+ {
+ None,
+ GenerateOnGet,
+ GenerateOnInit
+ }
+}
diff --git a/Pilz.IO/Extensions.cs b/Pilz.IO/Extensions.cs
new file mode 100644
index 0000000..0cf41e2
--- /dev/null
+++ b/Pilz.IO/Extensions.cs
@@ -0,0 +1,26 @@
+using Pilz.Runtime;
+using Pilz.Win32.Native;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+
+namespace Pilz.IO
+{
+ public static class Extensions
+ {
+ static readonly int MAX_PATH = 255;
+
+ public static string GetExecutablePath(bool checkRealOS = false)
+ {
+ if (RuntimeInformationsEx.IsOSPlatform(OSType.Windows, checkRealOS))
+ {
+ var sb = new StringBuilder(MAX_PATH);
+ Kernel32.GetModuleFileName(IntPtr.Zero, sb, MAX_PATH);
+ return sb.ToString();
+ }
+ else
+ return Process.GetCurrentProcess().MainModule.FileName;
+ }
+ }
+}
diff --git a/Pilz.IO/Pilz.IO.csproj b/Pilz.IO/Pilz.IO.csproj
index 511e3a5..3b9bcb2 100644
--- a/Pilz.IO/Pilz.IO.csproj
+++ b/Pilz.IO/Pilz.IO.csproj
@@ -86,4 +86,8 @@
Application.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/Pilz.UI/PaintingControl/PaintingControl.vb b/Pilz.UI/PaintingControl/PaintingControl.vb
index 0de9a3c..e1a7890 100644
--- a/Pilz.UI/PaintingControl/PaintingControl.vb
+++ b/Pilz.UI/PaintingControl/PaintingControl.vb
@@ -644,7 +644,7 @@ Public Class PaintingControl
End Sub
Private Sub CheckMouseWheel(sender As Object, e As MouseEventArgs) Handles Me.MouseWheel
- If pressedControl Then
+ If pressedAlt Then
Dim val As Single = e.Delta / 120 / 10
ZoomFactor = New SizeF(Math.Max(ZoomFactor.Width + val, 0.25), Math.Max(ZoomFactor.Height + val, 0.25))
Refresh()
diff --git a/Pilz.Win32/Native/Kernel32.vb b/Pilz.Win32/Native/Kernel32.vb
new file mode 100644
index 0000000..0164502
--- /dev/null
+++ b/Pilz.Win32/Native/Kernel32.vb
@@ -0,0 +1,16 @@
+Imports System.Runtime.InteropServices
+Imports System.Text
+
+Namespace Native
+
+ Public Class Kernel32
+
+ Private Const LIB_KERNEL32 As String = "kernel32.dll"
+
+
+ Public Shared Function GetModuleFileName(hModule As IntPtr, lpFilename As StringBuilder, nSize As Integer) As UInteger
+ End Function
+
+ End Class
+
+End Namespace
diff --git a/Pilz.Win32/Native/User32.vb b/Pilz.Win32/Native/User32.vb
index d10c083..cf69991 100644
--- a/Pilz.Win32/Native/User32.vb
+++ b/Pilz.Win32/Native/User32.vb
@@ -4,11 +4,13 @@ Namespace Native
Public Class User32
-
+ Private Const LIB_USER32 As String = "user32.dll"
+
+
Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef r As RECT) As Boolean
End Function
-
+
Public Shared Function ChildWindowFromPointEx(ByVal hWndParent As IntPtr, ByVal pt As POINT, ByVal uFlags As UInteger) As IntPtr
End Function
diff --git a/Pilz/Runtime/RuntimeInformationsEx.vb b/Pilz/Runtime/RuntimeInformationsEx.vb
index d6f53c3..5e9ad7a 100644
--- a/Pilz/Runtime/RuntimeInformationsEx.vb
+++ b/Pilz/Runtime/RuntimeInformationsEx.vb
@@ -26,9 +26,9 @@ Namespace Runtime
End Get
End Property
- Public ReadOnly Property RealOSType As OSType
- Get
- Static t As OSType? = Nothing
+ Public ReadOnly Property RealOSType As OSType
+ Get
+ Static t As OSType? = Nothing
If t Is Nothing Then
@@ -69,9 +69,13 @@ Namespace Runtime
End If
Return t
- End Get
- End Property
+ End Get
+ End Property
- End Module
+ Public Function IsOSPlatform(os As OSType, checkRealOS As Boolean) As Boolean
+ Return If(checkRealOS, RealOSType, OSType) = os
+ End Function
+
+ End Module
End Namespace