add Pilz.UI & Pilz.UI.Gtk

This commit is contained in:
2025-06-16 12:19:28 +02:00
parent 299867a910
commit 6f7bb5d92c
14 changed files with 175 additions and 32 deletions

View File

@@ -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;
}
}

View File

@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup>
<Version>1.0.0</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GtkSharp" Version="3.24.24.95" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.UI\Pilz.UI.csproj" />
</ItemGroup>
</Project>

View File

@@ -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<TSymbols> : BaseSymbolFactory<TSymbols>, IGtkSymbolFactory<TSymbols>
{
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);
}
}

View File

@@ -0,0 +1,12 @@
using Gtk;
using Pilz.UI.Symbols;
using System.Drawing;
namespace Pilz.UI.Gtk.Symbols;
public interface IGtkSymbolFactory<TSymbols> : IBaseSymbolFactory<TSymbols>
{
Image? GetImage(TSymbols svgImage, Size size);
Image? GetImage(TSymbols svgImage, SymbolSize size);
Image GetImageFromPixbuf(Gdk.Pixbuf pixbuf);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -47,6 +47,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.Drawing\Pilz.Drawing.vbproj" />
<ProjectReference Include="..\Pilz.UI\Pilz.UI.csproj" />
<ProjectReference Include="..\Pilz.Win32\Pilz.Win32.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,12 +1,10 @@
using System.Reflection;
using Pilz.UI.Symbols;
using System.Reflection;
namespace Pilz.UI.WinForms.Symbols;
public interface ISymbolFactory<TSymbols>
public interface ISymbolFactory<TSymbols> : IBaseSymbolFactory<TSymbols>
{
Image? GetImage(TSymbols svgImage, Size size);
Image? GetImage(TSymbols svgImage, SymbolSize size);
Assembly GetImageResourceAssembly();
string GetImageRessourcePath(TSymbols svgImage);
Stream? GetImageRessourceStream(TSymbols svgImage);
}

View File

@@ -1,31 +1,9 @@
using System.Reflection;
using Pilz.UI.Symbols;
namespace Pilz.UI.WinForms.Symbols;
public abstract class SymbolFactory<TSymbols> : ISymbolFactory<TSymbols>
public abstract class SymbolFactory<TSymbols> : BaseSymbolFactory<TSymbols>, ISymbolFactory<TSymbols>
{
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));

14
Pilz.UI/Pilz.UI.csproj Normal file
View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup>
<Version>3.0.0</Version>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,29 @@
using System.Drawing;
using System.Reflection;
namespace Pilz.UI.Symbols;
public abstract class BaseSymbolFactory<TSymbols> : IBaseSymbolFactory<TSymbols>
{
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);
}
}

View File

@@ -0,0 +1,9 @@
using System.Reflection;
namespace Pilz.UI.Symbols;
public interface IBaseSymbolFactory<TSymbols>
{
Assembly GetImageResourceAssembly();
string GetImageRessourcePath(TSymbols svgImage);
Stream? GetImageRessourceStream(TSymbols svgImage);
}

View File

@@ -1,4 +1,4 @@
namespace Pilz.UI.WinForms.Symbols;
namespace Pilz.UI.Symbols;
public enum SymbolSize
{

View File

@@ -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