using Pilz.UI.WinForms.Dialogs; namespace Pilz.UI.Dialogs; partial class DialogBase { public delegate void DialogLoadingEventHandler(DialogLoadingEventArgs e); public delegate void DialogClosedEventHandler(DialogClosedEventArgs e); public static event DialogLoadingEventHandler? DialogLoading; public static event DialogClosedEventHandler? DialogClosed; public static T Show(string title, Icon icon, object? tag = null) where T : FlyoutBase { return Show(null, title, icon, tag); } public static T ShowDialog(string title, Icon icon, object? tag = null) where T : FlyoutBase { return ShowDialog(null, title, icon, tag); } public static T Show(IWin32Window? parent, string title, Icon icon, object? tag = null) where T : FlyoutBase { return Show(CreatePanelInstance(tag), parent, title, icon); } public static T ShowDialog(IWin32Window? parent, string title, Icon icon, object? tag = null) where T : FlyoutBase { return ShowDialog(CreatePanelInstance(tag), parent, title, icon); } public static T Show(T dialogPanel, string title, Icon icon) where T : FlyoutBase { return Show(dialogPanel, null, title, icon); } public static T ShowDialog(T dialogPanel, string title, Icon icon) where T : FlyoutBase { return ShowDialog(dialogPanel, null, title, icon); } public static T Show(T dialogPanel, IWin32Window? parent, string title, Icon icon) where T : FlyoutBase { CreateForm(dialogPanel, parent, title, icon).Show(); return dialogPanel; } public static T ShowDialog(T dialogPanel, IWin32Window? parent, string title, Icon icon) where T : FlyoutBase { CreateForm(dialogPanel, parent, title, icon).ShowDialog(); return dialogPanel; } private static T CreatePanelInstance(object? tag) where T : FlyoutBase { T dialogPanel = Activator.CreateInstance(); dialogPanel.Tag = tag; return dialogPanel; } private static DialogBase CreateForm(T dialogPanel, IWin32Window? parent, string title, Icon icon) where T : FlyoutBase { dialogPanel.Dock = DockStyle.Fill; var dialog = new DialogBase(dialogPanel) { Text = title, Icon = icon, StartPosition = parent == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent, ClientSize = dialogPanel.Size }; dialog.Controls.Add(dialogPanel); return dialog; } }