GtkDialog.cs 4.1 KB

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