From f5a7e3ef7e25aa2545f541e171f2d5f6fe43ecc7 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Mon, 8 Feb 2021 00:00:49 -0500 Subject: Erable playing audio in bg thread; Sirop backend initalized; Msgbox added --- Erable/Views/MessageBox.axaml.cs | 74 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Erable/Views/MessageBox.axaml.cs (limited to 'Erable/Views/MessageBox.axaml.cs') diff --git a/Erable/Views/MessageBox.axaml.cs b/Erable/Views/MessageBox.axaml.cs new file mode 100644 index 0000000..6d8b6d9 --- /dev/null +++ b/Erable/Views/MessageBox.axaml.cs @@ -0,0 +1,74 @@ +using System.Threading.Tasks; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Erable.Views +{ + public class MessageBox : Window + { + public enum MessageBoxButtons + { + Ok, + OkCancel, + YesNo, + YesNoCancel + } + + public enum MessageBoxResult + { + Ok, + Cancel, + Yes, + No + } + + + public MessageBox() + { + AvaloniaXamlLoader.Load(this); + } + + public static Task Show(Window parent, string text, string title, MessageBoxButtons buttons) + { + var msgbox = new MessageBox() + { + Title = title + }; + msgbox.FindControl("Text").Text = text; + var buttonPanel = msgbox.FindControl("Buttons"); + + var res = MessageBoxResult.Ok; + + void AddButton(string caption, MessageBoxResult r, bool def = false) + { + var btn = new Button {Content = caption}; + btn.Click += (_, __) => { + res = r; + msgbox.Close(); + }; + buttonPanel.Children.Add(btn); + if (def) + res = r; + } + + if (buttons == MessageBoxButtons.Ok || buttons == MessageBoxButtons.OkCancel) + AddButton("OK", MessageBoxResult.Ok, true); + if (buttons == MessageBoxButtons.YesNo || buttons == MessageBoxButtons.YesNoCancel) + { + AddButton("Yes", MessageBoxResult.Yes); + AddButton("No", MessageBoxResult.No, true); + } + + if (buttons == MessageBoxButtons.OkCancel || buttons == MessageBoxButtons.YesNoCancel) + AddButton("Cancel", MessageBoxResult.Cancel, true); + + + var tcs = new TaskCompletionSource(); + msgbox.Closed += delegate { tcs.TrySetResult(res); }; + if (parent != null) + msgbox.ShowDialog(parent); + else msgbox.Show(); + return tcs.Task; + } + } +} \ No newline at end of file -- cgit v1.2.3