using System; using System.ComponentModel; using Avalonia.Controls; using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls.Primitives; namespace Artemis.UI.Shared.Flyouts; /// /// Defines a flyout that hosts a data model picker. /// public sealed class DataModelPickerFlyout : PickerFlyoutBase { private DataModelPicker.DataModelPicker? _picker; /// /// Gets the data model picker that the flyout hosts. /// public DataModelPicker.DataModelPicker DataModelPicker => _picker ??= new DataModelPicker.DataModelPicker(); /// /// Raised when the Confirmed button is tapped indicating the new Color should be applied /// public event TypedEventHandler? Confirmed; /// /// Raised when the Dismiss button is tapped, indicating the new color should not be applied /// public event TypedEventHandler? Dismissed; /// protected override Control CreatePresenter() { _picker ??= new DataModelPicker.DataModelPicker(); PickerFlyoutPresenter presenter = new() {Content = DataModelPicker}; presenter.Confirmed += OnFlyoutConfirmed; presenter.Dismissed += OnFlyoutDismissed; return presenter; } /// protected override void OnConfirmed() { Confirmed?.Invoke(this, EventArgs.Empty); Hide(); } /// protected override void OnOpening(CancelEventArgs args) { base.OnOpening(args); (Popup.Child as PickerFlyoutPresenter)?.Classes.Set(":acceptdismiss", true); } private void OnFlyoutDismissed(PickerFlyoutPresenter sender, object args) { Dismissed?.Invoke(this, EventArgs.Empty); Hide(); } private void OnFlyoutConfirmed(PickerFlyoutPresenter sender, object args) { OnConfirmed(); } }