diff --git a/Pilz.UI.Gtk/Dialogs/MessageBox.cs b/Pilz.UI.Gtk/Dialogs/MessageBox.cs
new file mode 100644
index 0000000..6294101
--- /dev/null
+++ b/Pilz.UI.Gtk/Dialogs/MessageBox.cs
@@ -0,0 +1,23 @@
+using Gtk;
+
+namespace Pilz.UI.Gtk.Dialogs;
+
+public static class MessageBox
+{
+ [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Nicht verwendete Parameter entfernen", Justification = "Can be used for easier migration from WinForms. However, the title get ignored as Gtk has no title parameter.")]
+ public static ResponseType Show(Window window, string message, string title, ButtonsType buttons, MessageType type)
+ {
+ var msgBox = new MessageDialog(window, DialogFlags.DestroyWithParent, type, buttons, message);
+ var result = msgBox.Run();
+ msgBox.Destroy();
+ return (ResponseType)result;
+ }
+
+ public static ResponseType Show(Window window, ButtonsType buttons, MessageType type, string format, params object[] args)
+ {
+ var msgBox = new MessageDialog(window, DialogFlags.DestroyWithParent, type, buttons, format, args);
+ var result = msgBox.Run();
+ msgBox.Destroy();
+ return (ResponseType)result;
+ }
+}
diff --git a/Pilz.UI.Gtk/Pilz.UI.Gtk.csproj b/Pilz.UI.Gtk/Pilz.UI.Gtk.csproj
new file mode 100644
index 0000000..86bac70
--- /dev/null
+++ b/Pilz.UI.Gtk/Pilz.UI.Gtk.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net8.0
+ enable
+ enable
+ true
+
+
+
+ 1.0.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Pilz.UI.Gtk/Symbols/GtkSymbolFactory.cs b/Pilz.UI.Gtk/Symbols/GtkSymbolFactory.cs
new file mode 100644
index 0000000..7f107da
--- /dev/null
+++ b/Pilz.UI.Gtk/Symbols/GtkSymbolFactory.cs
@@ -0,0 +1,35 @@
+using Gdk;
+using Gtk;
+using Pilz.UI.Symbols;
+using Size = System.Drawing.Size;
+
+namespace Pilz.UI.Gtk.Symbols;
+
+public abstract class GtkSymbolFactory : BaseSymbolFactory, IGtkSymbolFactory
+{
+ 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;
+
+ Pixbuf pixbuf;
+ if (size.IsEmpty)
+ pixbuf = new(stream);
+ else
+ pixbuf = new(stream, size.Width, size.Height);
+
+ return GetImageFromPixbuf(pixbuf);
+ }
+
+ public virtual Image GetImageFromPixbuf(Pixbuf pixbuf)
+ {
+ return new Image(pixbuf);
+ }
+}
\ No newline at end of file
diff --git a/Pilz.UI.Gtk/Symbols/IGtkSymbolFactory.cs b/Pilz.UI.Gtk/Symbols/IGtkSymbolFactory.cs
new file mode 100644
index 0000000..3a3671f
--- /dev/null
+++ b/Pilz.UI.Gtk/Symbols/IGtkSymbolFactory.cs
@@ -0,0 +1,12 @@
+using Gtk;
+using Pilz.UI.Symbols;
+using System.Drawing;
+
+namespace Pilz.UI.Gtk.Symbols;
+
+public interface IGtkSymbolFactory : IBaseSymbolFactory
+{
+ Image? GetImage(TSymbols svgImage, Size size);
+ Image? GetImage(TSymbols svgImage, SymbolSize size);
+ Image GetImageFromPixbuf(Gdk.Pixbuf pixbuf);
+}
\ No newline at end of file
diff --git a/Pilz.UI.WinForms.Telerik/Symbols/IRadSymbolFactory.cs b/Pilz.UI.WinForms.Telerik/Symbols/IRadSymbolFactory.cs
index e18183e..77ddd21 100644
--- a/Pilz.UI.WinForms.Telerik/Symbols/IRadSymbolFactory.cs
+++ b/Pilz.UI.WinForms.Telerik/Symbols/IRadSymbolFactory.cs
@@ -1,4 +1,5 @@
-using Pilz.UI.WinForms.Symbols;
+using Pilz.UI.Symbols;
+using Pilz.UI.WinForms.Symbols;
using Telerik.WinControls;
namespace Pilz.UI.WinForms.Telerik.Symbols;
diff --git a/Pilz.UI.WinForms.Telerik/Symbols/RadSymbolFactory.cs b/Pilz.UI.WinForms.Telerik/Symbols/RadSymbolFactory.cs
index 11f0496..4e0b884 100644
--- a/Pilz.UI.WinForms.Telerik/Symbols/RadSymbolFactory.cs
+++ b/Pilz.UI.WinForms.Telerik/Symbols/RadSymbolFactory.cs
@@ -1,4 +1,5 @@
-using Pilz.UI.WinForms.Symbols;
+using Pilz.UI.Symbols;
+using Pilz.UI.WinForms.Symbols;
using Pilz.UI.WinForms.Telerik.Extensions;
using Telerik.WinControls;
diff --git a/Pilz.UI.WinForms/Pilz.UI.WinForms.csproj b/Pilz.UI.WinForms/Pilz.UI.WinForms.csproj
index e3c76e7..c75ab8e 100644
--- a/Pilz.UI.WinForms/Pilz.UI.WinForms.csproj
+++ b/Pilz.UI.WinForms/Pilz.UI.WinForms.csproj
@@ -47,6 +47,7 @@
+
\ No newline at end of file
diff --git a/Pilz.UI.WinForms/Symbols/ISymbolFactory.cs b/Pilz.UI.WinForms/Symbols/ISymbolFactory.cs
index 791de21..603958c 100644
--- a/Pilz.UI.WinForms/Symbols/ISymbolFactory.cs
+++ b/Pilz.UI.WinForms/Symbols/ISymbolFactory.cs
@@ -1,12 +1,10 @@
-using System.Reflection;
+using Pilz.UI.Symbols;
+using System.Reflection;
namespace Pilz.UI.WinForms.Symbols;
-public interface ISymbolFactory
+public interface ISymbolFactory : IBaseSymbolFactory
{
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.WinForms/Symbols/SymbolFactory.cs b/Pilz.UI.WinForms/Symbols/SymbolFactory.cs
index 55cea40..a3998ce 100644
--- a/Pilz.UI.WinForms/Symbols/SymbolFactory.cs
+++ b/Pilz.UI.WinForms/Symbols/SymbolFactory.cs
@@ -1,31 +1,9 @@
-using System.Reflection;
+using Pilz.UI.Symbols;
namespace Pilz.UI.WinForms.Symbols;
-public abstract class SymbolFactory : ISymbolFactory
+public abstract class SymbolFactory : BaseSymbolFactory, ISymbolFactory
{
- public abstract string GetImageRessourcePath(TSymbols svgImage);
- public abstract Assembly GetImageResourceAssembly();
-
- protected virtual Size ResolveCommonSize(SymbolSize size)
- {
- return size switch
- {
- SymbolSize.Default => Size.Empty,
- SymbolSize.Small => new Size(16, 16),
- SymbolSize.Medium => new Size(20, 20),
- SymbolSize.Large => new Size(32, 32),
- _ => new Size((int)size, (int)size),
- };
- }
-
- 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));
diff --git a/Pilz.UI/Pilz.UI.csproj b/Pilz.UI/Pilz.UI.csproj
new file mode 100644
index 0000000..296e478
--- /dev/null
+++ b/Pilz.UI/Pilz.UI.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+ true
+
+
+
+ 3.0.0
+
+
+
diff --git a/Pilz.UI/Symbols/BaseSymbolFactory.cs b/Pilz.UI/Symbols/BaseSymbolFactory.cs
new file mode 100644
index 0000000..29a33f9
--- /dev/null
+++ b/Pilz.UI/Symbols/BaseSymbolFactory.cs
@@ -0,0 +1,29 @@
+using System.Drawing;
+using System.Reflection;
+
+namespace Pilz.UI.Symbols;
+
+public abstract class BaseSymbolFactory : IBaseSymbolFactory
+{
+ public abstract string GetImageRessourcePath(TSymbols svgImage);
+ public abstract Assembly GetImageResourceAssembly();
+
+ protected virtual Size ResolveCommonSize(SymbolSize size)
+ {
+ return size switch
+ {
+ SymbolSize.Default => Size.Empty,
+ SymbolSize.Small => new Size(16, 16),
+ SymbolSize.Medium => new Size(20, 20),
+ SymbolSize.Large => new Size(32, 32),
+ _ => new Size((int)size, (int)size),
+ };
+ }
+
+ public virtual Stream? GetImageRessourceStream(TSymbols svgImage)
+ {
+ var asm = GetImageResourceAssembly();
+ var path = GetImageRessourcePath(svgImage);
+ return asm.GetManifestResourceStream(path);
+ }
+}
diff --git a/Pilz.UI/Symbols/IBaseSymbolFactory.cs b/Pilz.UI/Symbols/IBaseSymbolFactory.cs
new file mode 100644
index 0000000..2442631
--- /dev/null
+++ b/Pilz.UI/Symbols/IBaseSymbolFactory.cs
@@ -0,0 +1,9 @@
+using System.Reflection;
+
+namespace Pilz.UI.Symbols;
+public interface IBaseSymbolFactory
+{
+ Assembly GetImageResourceAssembly();
+ string GetImageRessourcePath(TSymbols svgImage);
+ Stream? GetImageRessourceStream(TSymbols svgImage);
+}
diff --git a/Pilz.UI.WinForms/Symbols/SymbolSize.cs b/Pilz.UI/Symbols/SymbolSize.cs
similarity index 97%
rename from Pilz.UI.WinForms/Symbols/SymbolSize.cs
rename to Pilz.UI/Symbols/SymbolSize.cs
index 29c626d..85efff1 100644
--- a/Pilz.UI.WinForms/Symbols/SymbolSize.cs
+++ b/Pilz.UI/Symbols/SymbolSize.cs
@@ -1,4 +1,4 @@
-namespace Pilz.UI.WinForms.Symbols;
+namespace Pilz.UI.Symbols;
public enum SymbolSize
{
diff --git a/Pilz.sln b/Pilz.sln
index a741793..5e47d7b 100644
--- a/Pilz.sln
+++ b/Pilz.sln
@@ -47,6 +47,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Extensions", "Pilz.Ext
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.UI.WinForms.Telerik.Symbols", "Pilz.UI.WinForms.Telerik.Symbols\Pilz.UI.WinForms.Telerik.Symbols.csproj", "{9F10C26F-1D9F-4B0B-8A7A-73A6082C5BF7}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.UI.Gtk", "Pilz.UI.Gtk\Pilz.UI.Gtk.csproj", "{AA8CCE40-6BEE-4DC3-B973-D4F719940793}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.UI", "Pilz.UI\Pilz.UI.csproj", "{E75FBCEF-B971-4036-85D3-27D4ACA77156}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -231,6 +235,22 @@ Global
{9F10C26F-1D9F-4B0B-8A7A-73A6082C5BF7}.Release|Any CPU.Build.0 = Release|Any CPU
{9F10C26F-1D9F-4B0B-8A7A-73A6082C5BF7}.Release|x86.ActiveCfg = Release|Any CPU
{9F10C26F-1D9F-4B0B-8A7A-73A6082C5BF7}.Release|x86.Build.0 = Release|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Debug|x86.Build.0 = Debug|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Release|x86.ActiveCfg = Release|Any CPU
+ {AA8CCE40-6BEE-4DC3-B973-D4F719940793}.Release|x86.Build.0 = Release|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Debug|x86.Build.0 = Debug|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Release|x86.ActiveCfg = Release|Any CPU
+ {E75FBCEF-B971-4036-85D3-27D4ACA77156}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE