GtkDialog.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using Gtk;
  2. using Ryujinx.Common.Logging;
  3. using Ryujinx.UI.Common.Configuration;
  4. using System.Collections.Generic;
  5. using System.Reflection;
  6. namespace Ryujinx.UI.Widgets
  7. {
  8. internal class GtkDialog : MessageDialog
  9. {
  10. private static bool _isChoiceDialogOpen;
  11. private GtkDialog(string title, string mainText, string secondaryText, MessageType messageType = MessageType.Other, ButtonsType buttonsType = ButtonsType.Ok)
  12. : base(null, DialogFlags.Modal, messageType, buttonsType, null)
  13. {
  14. Title = title;
  15. Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.UI.Common.Resources.Logo_Ryujinx.png");
  16. Text = mainText;
  17. SecondaryText = secondaryText;
  18. WindowPosition = WindowPosition.Center;
  19. SecondaryUseMarkup = true;
  20. Response += GtkDialog_Response;
  21. SetSizeRequest(200, 20);
  22. }
  23. private void GtkDialog_Response(object sender, ResponseArgs args)
  24. {
  25. Dispose();
  26. }
  27. internal static void CreateInfoDialog(string mainText, string secondaryText)
  28. {
  29. new GtkDialog("Ryujinx - Info", mainText, secondaryText, MessageType.Info).Run();
  30. }
  31. internal static void CreateUpdaterInfoDialog(string mainText, string secondaryText)
  32. {
  33. new GtkDialog("Ryujinx - Updater", mainText, secondaryText, MessageType.Info).Run();
  34. }
  35. internal static MessageDialog CreateWaitingDialog(string mainText, string secondaryText)
  36. {
  37. return new GtkDialog("Ryujinx - Waiting", mainText, secondaryText, MessageType.Info, ButtonsType.None);
  38. }
  39. internal static void CreateWarningDialog(string mainText, string secondaryText)
  40. {
  41. new GtkDialog("Ryujinx - Warning", mainText, secondaryText, MessageType.Warning).Run();
  42. }
  43. internal static void CreateErrorDialog(string errorMessage)
  44. {
  45. Logger.Error?.Print(LogClass.Application, errorMessage);
  46. new GtkDialog("Ryujinx - Error", "Ryujinx has encountered an error", errorMessage, MessageType.Error).Run();
  47. }
  48. internal static MessageDialog CreateConfirmationDialog(string mainText, string secondaryText = "")
  49. {
  50. return new GtkDialog("Ryujinx - Confirmation", mainText, secondaryText, MessageType.Question, ButtonsType.YesNo);
  51. }
  52. internal static bool CreateChoiceDialog(string title, string mainText, string secondaryText)
  53. {
  54. if (_isChoiceDialogOpen)
  55. {
  56. return false;
  57. }
  58. _isChoiceDialogOpen = true;
  59. ResponseType response = (ResponseType)new GtkDialog(title, mainText, secondaryText, MessageType.Question, ButtonsType.YesNo).Run();
  60. _isChoiceDialogOpen = false;
  61. return response == ResponseType.Yes;
  62. }
  63. internal static ResponseType CreateCustomDialog(string title, string mainText, string secondaryText, Dictionary<int, string> buttons, MessageType messageType = MessageType.Other)
  64. {
  65. GtkDialog gtkDialog = new(title, mainText, secondaryText, messageType, ButtonsType.None);
  66. foreach (var button in buttons)
  67. {
  68. gtkDialog.AddButton(button.Value, button.Key);
  69. }
  70. return (ResponseType)gtkDialog.Run();
  71. }
  72. internal static string CreateInputDialog(Window parent, string title, string mainText, uint inputMax)
  73. {
  74. GtkInputDialog gtkDialog = new(parent, title, mainText, inputMax);
  75. ResponseType response = (ResponseType)gtkDialog.Run();
  76. string responseText = gtkDialog.InputEntry.Text.TrimEnd();
  77. gtkDialog.Dispose();
  78. if (response == ResponseType.Ok)
  79. {
  80. return responseText;
  81. }
  82. return "";
  83. }
  84. internal static bool CreateExitDialog()
  85. {
  86. return CreateChoiceDialog("Ryujinx - Exit", "Are you sure you want to close Ryujinx?", "All unsaved data will be lost!");
  87. }
  88. }
  89. }