using System; using Avalonia.Controls.Notifications; namespace SukiUI.Dialogs { public static class FluentSukiDialogBuilder { #region Content /// /// Creates a instance that can be used to construct a /// public static SukiDialogBuilder CreateDialog(this ISukiDialogManager mgr) => new(mgr); /// /// Gives the dialog a "type" which will display an icon representing it. /// This can be used for MessageBox style dialogs. /// public static SukiDialogBuilder OfType(this SukiDialogBuilder builder, NotificationType type) { builder.SetType(type); return builder; } /// /// Gives the dialog a title. /// public static SukiDialogBuilder WithTitle(this SukiDialogBuilder builder, string title) { builder.SetTitle(title); return builder; } /// /// Gives the dialog content. This content can be a ViewModel if desired. /// public static SukiDialogBuilder WithContent(this SukiDialogBuilder builder, object content) { builder.SetContent(content); return builder; } /// /// Hide Card background. /// public static SukiDialogBuilder ShowCardBackground(this SukiDialogBuilder builder, bool show) { builder.SetShowCardBackground(show); return builder; } /// /// Gives the dialog a ViewModel. If this is used, Title/Content are ignored and only the ViewModel is rendered - the View being located by the usual strategy. /// This is useful for custom dialogs. /// public static SukiDialogBuilder WithViewModel(this SukiDialogBuilder builder, Func viewModel) { builder.SetViewModel(viewModel); return builder; } #endregion #region Dismissing /// /// Begins a dismiss chain. /// public static SukiDialogBuilder.DismissDialog Dismiss(this SukiDialogBuilder builder) => new(builder); /// /// Allows the dialog to be dismissed simply by clicking the background /// public static SukiDialogBuilder ByClickingBackground(this SukiDialogBuilder.DismissDialog dismissBuilder) { dismissBuilder.Builder.SetCanDismissWithBackgroundClick(true); return dismissBuilder.Builder; } #endregion #region Actions /// /// Adds a button to the bottom of the dialog which will call the supplied callback when clicked. /// Any number of buttons can be added to the dialog. /// public static SukiDialogBuilder WithActionButton(this SukiDialogBuilder builder, object? content, Action onClicked, bool dismissOnClick = false, params string[] classes) { builder.AddActionButton(content, onClicked, dismissOnClick, classes); return builder; } /// /// Provides a callback that will be called when this dialog is dismissed for any reason. /// public static SukiDialogBuilder OnDismissed(this SukiDialogBuilder builder, Action onDismissed) { builder.SetOnDismissed(onDismissed); return builder; } #endregion } }