203 lines
4.9 KiB
C#
203 lines
4.9 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Interactivity;
|
|
using Avalonia.Media;
|
|
|
|
namespace Pilz.UI.AvaloniaUI.Dialogs;
|
|
|
|
public partial class AvaloniaFlyoutBase : UserControl
|
|
{
|
|
protected readonly BackgroundWorker bgWorker_LoadData = new();
|
|
|
|
public delegate void OnCloseEventHandler(object? sender, EventArgs e);
|
|
|
|
public event OnCloseEventHandler? OnClose;
|
|
|
|
public static IImage? CancelImage { get; set; } = null;
|
|
public static IImage? ConfirmImage { get; set; } = null;
|
|
|
|
public static readonly StyledProperty<object?> MainContentProperty = AvaloniaProperty.Register<AvaloniaFlyoutBase, object?>(nameof(MainContent));
|
|
public static readonly StyledProperty<object?> FooterContentProperty = AvaloniaProperty.Register<AvaloniaFlyoutBase, object?>(nameof(FooterContent));
|
|
|
|
[Browsable(false)]
|
|
public object? Result { get; protected set; }
|
|
|
|
[DefaultValue(true)]
|
|
public bool RegisterDialogAccept { get; set; } = true;
|
|
|
|
[DefaultValue(true)]
|
|
public bool RegisterDialogCancel { get; set; } = true;
|
|
|
|
protected AvaloniaFlyoutBase()
|
|
{
|
|
InitializeComponent();
|
|
|
|
CancelButtonImage = CancelImage;
|
|
ConfirmButtonImage = ConfirmImage;
|
|
|
|
bgWorker_LoadData.DoWork += BgWorker_LoadData_DoWork;
|
|
bgWorker_LoadData.RunWorkerCompleted += BgWorker_LoadData_RunWorkerCompleted;
|
|
}
|
|
|
|
public object? MainContent
|
|
{
|
|
get => GetValue(MainContentProperty);
|
|
set => SetValue(MainContentProperty, value);
|
|
}
|
|
|
|
public object? FooterContent
|
|
{
|
|
get => GetValue(FooterContentProperty);
|
|
set => SetValue(FooterContentProperty, value);
|
|
}
|
|
|
|
[DefaultValue(true)]
|
|
public virtual bool ActionPanelVisible
|
|
{
|
|
get => StackPanelFooter.IsVisible;
|
|
set => StackPanelFooter.IsVisible = value;
|
|
}
|
|
|
|
[DefaultValue(true)]
|
|
public virtual bool CancelButtonVisible
|
|
{
|
|
get => ButtonCancel.IsVisible;
|
|
set => ButtonCancel.IsVisible = value;
|
|
}
|
|
|
|
[DefaultValue(true)]
|
|
public virtual bool ConfirmButtonVisible
|
|
{
|
|
get => ButtonOkay.IsVisible;
|
|
set => ButtonOkay.IsVisible = value;
|
|
}
|
|
|
|
[DefaultValue(true)]
|
|
public virtual bool CancelButtonEnable
|
|
{
|
|
get => ButtonCancel.IsEnabled;
|
|
set => ButtonCancel.IsEnabled = value;
|
|
}
|
|
|
|
[DefaultValue(true)]
|
|
public virtual bool ConfirmButtonEnable
|
|
{
|
|
get => ButtonOkay.IsEnabled;
|
|
set => ButtonOkay.IsEnabled = value;
|
|
}
|
|
|
|
[DefaultValue(null)]
|
|
public virtual IImage? CancelButtonImage
|
|
{
|
|
get => ButtonCancel.ImageSource;
|
|
set => ButtonCancel.ImageSource = value;
|
|
}
|
|
|
|
[DefaultValue(null)]
|
|
public virtual IImage? ConfirmButtonImage
|
|
{
|
|
get => ButtonOkay.ImageSource;
|
|
set => ButtonOkay.ImageSource = value;
|
|
}
|
|
|
|
[Localizable(true)]
|
|
[DefaultValue("Okay")]
|
|
public virtual string? ConfirmButtonText
|
|
{
|
|
get => ButtonOkay.Text;
|
|
set => ButtonOkay.Text = value;
|
|
}
|
|
|
|
[Localizable(true)]
|
|
[DefaultValue("Cancel")]
|
|
public virtual string? CancelButtonText
|
|
{
|
|
get => ButtonCancel.Text;
|
|
set => ButtonCancel.Text = value;
|
|
}
|
|
|
|
[Localizable(true)]
|
|
[DefaultValue("")]
|
|
public virtual string? Title
|
|
{
|
|
get => LabelTitle.Text;
|
|
set
|
|
{
|
|
LabelTitle.Text = value;
|
|
SetShowTitlePanel();
|
|
}
|
|
}
|
|
|
|
[DefaultValue(null)]
|
|
public virtual IImage? TitleIcon
|
|
{
|
|
get => ImageTitle.Source;
|
|
set
|
|
{
|
|
ImageTitle.Source = value;
|
|
SetShowTitlePanel();
|
|
}
|
|
}
|
|
|
|
protected virtual void BgWorker_LoadData_DoWork(object? sender, DoWorkEventArgs e)
|
|
{
|
|
OnLoadData(e);
|
|
}
|
|
|
|
protected virtual void BgWorker_LoadData_RunWorkerCompleted(object? sender, RunWorkerCompletedEventArgs e)
|
|
{
|
|
OnLoadDataCompleted(e);
|
|
}
|
|
|
|
protected virtual void LoadData()
|
|
{
|
|
bgWorker_LoadData.RunWorkerAsync();
|
|
}
|
|
|
|
protected virtual void LoadData(object? argument)
|
|
{
|
|
bgWorker_LoadData.RunWorkerAsync(argument);
|
|
}
|
|
|
|
protected virtual void OnLoadData(DoWorkEventArgs e)
|
|
{
|
|
}
|
|
|
|
protected virtual void OnLoadDataCompleted(RunWorkerCompletedEventArgs e)
|
|
{
|
|
}
|
|
|
|
protected void Close()
|
|
{
|
|
OnClose?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
protected void Close(object? result)
|
|
{
|
|
Result = result;
|
|
Close();
|
|
}
|
|
|
|
protected virtual bool ValidateOK()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
protected virtual void SetShowTitlePanel()
|
|
{
|
|
StackPanelHeader.IsVisible = !string.IsNullOrWhiteSpace(Title) || TitleIcon != null;
|
|
}
|
|
|
|
protected virtual void ButtonOkay_OnClick(object? sender, RoutedEventArgs e)
|
|
{
|
|
if (ValidateOK())
|
|
Close(true);
|
|
}
|
|
|
|
protected virtual void ButtonCancel_OnClick(object? sender, RoutedEventArgs e)
|
|
{
|
|
Close(null);
|
|
}
|
|
} |