diff --git a/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj
index 43c85fe..fb2d732 100644
--- a/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj
+++ b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj
@@ -9,7 +9,6 @@
-
diff --git a/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj b/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj
deleted file mode 100644
index 4ed218b..0000000
--- a/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- net6.0
- enable
- enable
- Pilz.UI.Telerik
-
-
-
diff --git a/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj b/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj
deleted file mode 100644
index 2e31a24..0000000
--- a/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- net8.0-windows
- enable
- enable
- Pilz.UI.Telerik
-
-
- 2.0.4
-
-
-
-
- all
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs b/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs
deleted file mode 100644
index 90313b8..0000000
--- a/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Pilz.UI.Telerik;
-
-public enum SvgImageSize
-{
- Default,
- Small,
- Medium,
- Large
-}
diff --git a/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs b/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs
deleted file mode 100644
index c0e452f..0000000
--- a/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System.Drawing;
-using System.Reflection;
-using Telerik.WinControls;
-
-namespace Pilz.UI.Telerik;
-
-public abstract class SymbolFactory
-{
- public abstract string GetSvgImageRessourcePath(TSvgSymbols svgImage);
- public abstract Assembly GetSvgImageResourceAssembly();
-
- protected virtual Size ResolveCommonSize(SvgImageSize size)
- {
- return size switch
- {
- SvgImageSize.Small => new Size(16, 16),
- SvgImageSize.Medium => new Size(20, 20),
- SvgImageSize.Large => new Size(32, 32),
- _ => Size.Empty,
- };
- }
-
- public virtual Stream? GetSvgImageRessourceStream(TSvgSymbols svgImage)
- {
- var asm = GetSvgImageResourceAssembly();
- var path = GetSvgImageRessourcePath(svgImage);
- return asm.GetManifestResourceStream(path);
- }
-
- public virtual RadSvgImage GetSvgImage(TSvgSymbols svgImage, SvgImageSize size)
- {
- return GetSvgImage(svgImage, ResolveCommonSize(size));
- }
-
- public virtual RadSvgImage GetSvgImage(TSvgSymbols svgImage, Size size)
- {
- using var stream = GetSvgImageRessourceStream(svgImage);
- var img = RadSvgImage.FromStream(stream);
-
- if (!size.IsEmpty)
- img.Size = size;
-
- return img;
- }
-
- public virtual RadSvgImage GetSvgImageColored(TSvgSymbols svgImage, SvgImageSize size, Color color)
- {
- return GetSvgImageColored(svgImage, ResolveCommonSize(size), color);
- }
-
- public virtual RadSvgImage GetSvgImageColored(TSvgSymbols svgImage, Size size, Color color)
- {
- var img = GetSvgImage(svgImage, size);
- img.ApplyColor(color);
- return img;
- }
-
- public virtual Image GetImage(TSvgSymbols svgImage, SvgImageSize size)
- {
- return GetImage(svgImage, ResolveCommonSize(size));
- }
-
- public virtual Image GetImage(TSvgSymbols svgImage, Size size)
- {
- return GetImageFromSvg(GetSvgImage(svgImage, size));
- }
-
- public virtual Image GetImageColored(TSvgSymbols svgImage, SvgImageSize size, Color color)
- {
- return GetImageColored(svgImage, ResolveCommonSize(size), color);
- }
-
- public virtual Image GetImageColored(TSvgSymbols svgImage, Size size, Color color)
- {
- return GetImageFromSvg(GetSvgImageColored(svgImage, size, color));
- }
-
- public virtual Image GetImageFromSvg(RadSvgImage svg)
- {
- return svg.ToImage();
- }
-}
\ No newline at end of file
diff --git a/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs b/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs
new file mode 100644
index 0000000..2a2d0c7
--- /dev/null
+++ b/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs
@@ -0,0 +1,14 @@
+using Pilz.UI.Symbols;
+using Telerik.WinControls;
+
+namespace Pilz.UI.Telerik.Symbols;
+
+public interface IRadSymbolFactory : ISymbolFactory
+{
+ Image GetImageColored(TSymbols svgImage, Size size, Color color);
+ Image GetImageColored(TSymbols svgImage, SymbolSize size, Color color);
+ Image GetImageFromSvg(RadSvgImage svg);
+ RadSvgImage GetSvgImage(TSymbols svgImage, Size size);
+ RadSvgImage GetSvgImageColored(TSymbols svgImage, Size size, Color color);
+ RadSvgImage GetSvgImageColored(TSymbols svgImage, SymbolSize size, Color color);
+}
\ No newline at end of file
diff --git a/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs b/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs
new file mode 100644
index 0000000..4425958
--- /dev/null
+++ b/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs
@@ -0,0 +1,55 @@
+using Pilz.UI.Symbols;
+using Telerik.WinControls;
+
+namespace Pilz.UI.Telerik.Symbols;
+
+public abstract class RadSymbolFactory : SymbolFactory, IRadSymbolFactory
+{
+ public virtual RadSvgImage GetSvgImage(TSymbols svgImage, Size size)
+ {
+ using var stream = GetImageRessourceStream(svgImage);
+ var img = RadSvgImage.FromStream(stream);
+
+ if (!size.IsEmpty)
+ img.Size = size;
+
+ return img;
+ }
+
+ public virtual RadSvgImage GetSvgImageColored(TSymbols svgImage, SymbolSize size, Color color)
+ {
+ return GetSvgImageColored(svgImage, ResolveCommonSize(size), color);
+ }
+
+ public virtual RadSvgImage GetSvgImageColored(TSymbols svgImage, Size size, Color color)
+ {
+ var img = GetSvgImage(svgImage, size);
+ img.ApplyColor(color);
+ return img;
+ }
+
+ public override Image GetImage(TSymbols svgImage, SymbolSize size)
+ {
+ return GetImage(svgImage, ResolveCommonSize(size));
+ }
+
+ public override Image GetImage(TSymbols svgImage, Size size)
+ {
+ return GetImageFromSvg(GetSvgImage(svgImage, size));
+ }
+
+ public virtual Image GetImageColored(TSymbols svgImage, SymbolSize size, Color color)
+ {
+ return GetImageColored(svgImage, ResolveCommonSize(size), color);
+ }
+
+ public virtual Image GetImageColored(TSymbols svgImage, Size size, Color color)
+ {
+ return GetImageFromSvg(GetSvgImageColored(svgImage, size, color));
+ }
+
+ public virtual Image GetImageFromSvg(RadSvgImage svg)
+ {
+ return svg.ToImage();
+ }
+}
\ No newline at end of file
diff --git a/Pilz.UI/Symbols/ISymbolFactory.cs b/Pilz.UI/Symbols/ISymbolFactory.cs
new file mode 100644
index 0000000..a6bf507
--- /dev/null
+++ b/Pilz.UI/Symbols/ISymbolFactory.cs
@@ -0,0 +1,12 @@
+using System.Reflection;
+
+namespace Pilz.UI.Symbols;
+
+public interface ISymbolFactory
+{
+ Image? GetImage(TSymbols svgImage, Size size);
+ Image? GetImage(TSymbols svgImage, SymbolSize size);
+ Assembly GetImageResourceAssembly();
+ string GetImageRessourcePath(TSymbols svgImage);
+ Stream? GetImageRessourceStream(TSymbols svgImage);
+}
\ No newline at end of file
diff --git a/Pilz.UI/Symbols/SymbolFactory.cs b/Pilz.UI/Symbols/SymbolFactory.cs
new file mode 100644
index 0000000..c87f7fc
--- /dev/null
+++ b/Pilz.UI/Symbols/SymbolFactory.cs
@@ -0,0 +1,53 @@
+using System.Reflection;
+
+namespace Pilz.UI.Symbols;
+
+public abstract class SymbolFactory : ISymbolFactory
+{
+ public abstract string GetImageRessourcePath(TSymbols svgImage);
+ public abstract Assembly GetImageResourceAssembly();
+
+ protected virtual Size ResolveCommonSize(SymbolSize size)
+ {
+ return size switch
+ {
+ SymbolSize.Small => new Size(16, 16),
+ SymbolSize.Medium => new Size(20, 20),
+ SymbolSize.Large => new Size(32, 32),
+ _ => Size.Empty,
+ };
+ }
+
+ public virtual Stream? GetImageRessourceStream(TSymbols svgImage)
+ {
+ var asm = GetImageResourceAssembly();
+ var path = GetImageRessourcePath(svgImage);
+ return asm.GetManifestResourceStream(path);
+ }
+
+ public virtual Image? GetImage(TSymbols svgImage, SymbolSize size)
+ {
+ return GetImage(svgImage, ResolveCommonSize(size));
+ }
+
+ public virtual Image? GetImage(TSymbols svgImage, Size size)
+ {
+ using var stream = GetImageRessourceStream(svgImage);
+
+ if (stream is null)
+ return null;
+
+ var img = Image.FromStream(stream);
+
+ if (!size.IsEmpty)
+ {
+ var img2 = new Bitmap(size.Width, size.Height);
+ using var g = Graphics.FromImage(img2);
+ g.DrawImage(img2, 0, 0, size.Width, size.Height);
+ img.Dispose();
+ img = img2;
+ }
+
+ return img;
+ }
+}
diff --git a/Pilz.UI/Symbols/SymbolSize.cs b/Pilz.UI/Symbols/SymbolSize.cs
new file mode 100644
index 0000000..5a5c0cc
--- /dev/null
+++ b/Pilz.UI/Symbols/SymbolSize.cs
@@ -0,0 +1,21 @@
+namespace Pilz.UI.Symbols;
+
+public enum SymbolSize
+{
+ ///
+ /// Don't resize and just returns the original size.
+ ///
+ Default,
+ ///
+ /// Resizes the symbol to 16 x 16 pixels.
+ ///
+ Small,
+ ///
+ /// Resizes the symbol to 20 x 20 pixels.
+ ///
+ Medium,
+ ///
+ /// Resizes the symbol to 32 x 32 pixels.
+ ///
+ Large
+}
diff --git a/Pilz.sln b/Pilz.sln
index a106e24..6c52fbf 100644
--- a/Pilz.sln
+++ b/Pilz.sln
@@ -29,8 +29,6 @@ Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Pilz.Networking", "Pilz.Net
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik.SymbolFactory", "Pilz.UI.Telerik.SymbolFactory\Pilz.UI.Telerik.SymbolFactory.csproj", "{2B3B8161-29FF-4526-9082-4410AB5144A5}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik", "Pilz.UI.Telerik\Pilz.UI.Telerik.csproj", "{DF674119-CC28-40AA-968F-1E23D184A491}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Networking.CloudProviders.Nextcloud", "Pilz.Networking.CloudProviders.Nextcloud\Pilz.Networking.CloudProviders.Nextcloud.csproj", "{A91E966B-3A82-4F32-A703-2FC1C7654FD1}"
@@ -41,9 +39,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced", "Pi
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI", "Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj", "{5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced.UI", "Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj", "{5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI.Telerik", "Pilz.Plugins.Advanced.UI.Telerik\Pilz.Plugins.Advanced.UI.Telerik.csproj", "{0A837BD6-A19C-4A05-A57D-CBB0CD64B244}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced.UI.Telerik", "Pilz.Plugins.Advanced.UI.Telerik\Pilz.Plugins.Advanced.UI.Telerik.csproj", "{0A837BD6-A19C-4A05-A57D-CBB0CD64B244}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -157,14 +155,6 @@ Global
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|Any CPU.Build.0 = Release|Any CPU
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.ActiveCfg = Release|Any CPU
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.Build.0 = Release|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|x86.ActiveCfg = Debug|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|x86.Build.0 = Debug|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|Any CPU.Build.0 = Release|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|x86.ActiveCfg = Release|Any CPU
- {2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|x86.Build.0 = Release|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|x86.ActiveCfg = Debug|Any CPU