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