using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives;
using Avalonia.Interactivity;
using Irihi.Avalonia.Shared.Helpers;
namespace Ursa.Controls;
///
/// The messageBox used to display in OverlayDialogHost.
///
[TemplatePart(PART_NoButton, typeof(Button))]
[TemplatePart(PART_OKButton, typeof(Button))]
[TemplatePart(PART_CancelButton, typeof(Button))]
[TemplatePart(PART_YesButton, typeof(Button))]
public class MessageBoxControl : DialogControlBase
{
public const string PART_YesButton = "PART_YesButton";
public const string PART_NoButton = "PART_NoButton";
public const string PART_OKButton = "PART_OKButton";
public const string PART_CancelButton = "PART_CancelButton";
public static readonly StyledProperty MessageIconProperty =
AvaloniaProperty.Register(
nameof(MessageIcon));
public static readonly StyledProperty ButtonsProperty =
AvaloniaProperty.Register(
nameof(Buttons));
public static readonly StyledProperty TitleProperty =
AvaloniaProperty.Register(
nameof(Title));
private Button? _cancelButton;
private Button? _noButton;
private Button? _okButton;
private Button? _yesButton;
static MessageBoxControl()
{
ButtonsProperty.Changed.AddClassHandler((o, _) => { o.SetButtonVisibility(); });
}
public MessageBoxIcon MessageIcon
{
get => GetValue(MessageIconProperty);
set => SetValue(MessageIconProperty, value);
}
public MessageBoxButton Buttons
{
get => GetValue(ButtonsProperty);
set => SetValue(ButtonsProperty, value);
}
public string? Title
{
get => GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
Button.ClickEvent.RemoveHandler(DefaultButtonsClose, _okButton, _cancelButton, _yesButton, _noButton);
_okButton = e.NameScope.Find