ErrorAppletWindow.axaml.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Interactivity;
  4. using Avalonia.Markup.Xaml;
  5. using Avalonia.Threading;
  6. using Ryujinx.Ava.Common.Locale;
  7. using Ryujinx.Ava.Ui.Windows;
  8. using System.Threading.Tasks;
  9. namespace Ryujinx.Ava.Ui.Applet
  10. {
  11. internal class ErrorAppletWindow : StyleableWindow
  12. {
  13. private readonly Window _owner;
  14. private object _buttonResponse;
  15. public ErrorAppletWindow(Window owner, string[] buttons, string message)
  16. {
  17. _owner = owner;
  18. Message = message;
  19. DataContext = this;
  20. InitializeComponent();
  21. #if DEBUG
  22. this.AttachDevTools();
  23. #endif
  24. int responseId = 0;
  25. if (buttons != null)
  26. {
  27. foreach (string buttonText in buttons)
  28. {
  29. AddButton(buttonText, responseId);
  30. responseId++;
  31. }
  32. }
  33. else
  34. {
  35. AddButton(LocaleManager.Instance["InputDialogOk"], 0);
  36. }
  37. }
  38. public ErrorAppletWindow()
  39. {
  40. DataContext = this;
  41. InitializeComponent();
  42. #if DEBUG
  43. this.AttachDevTools();
  44. #endif
  45. }
  46. public string Message { get; set; }
  47. public StackPanel ButtonStack { get; set; }
  48. private void AddButton(string label, object tag)
  49. {
  50. Dispatcher.UIThread.InvokeAsync(() =>
  51. {
  52. Button button = new() { Content = label, Tag = tag };
  53. button.Click += Button_Click;
  54. ButtonStack.Children.Add(button);
  55. });
  56. }
  57. private void Button_Click(object sender, RoutedEventArgs e)
  58. {
  59. if (sender is Button button)
  60. {
  61. _buttonResponse = button.Tag;
  62. }
  63. Close();
  64. }
  65. public async Task<object> Run()
  66. {
  67. await ShowDialog(_owner);
  68. return _buttonResponse;
  69. }
  70. private void InitializeComponent()
  71. {
  72. AvaloniaXamlLoader.Load(this);
  73. ButtonStack = this.FindControl<StackPanel>("ButtonStack");
  74. }
  75. }
  76. }