MessageWindowViewModel.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using Avalonia.Controls;
  2. using Avalonia.Layout;
  3. using ReactiveUI;
  4. using System.IO;
  5. namespace VeloeMinecraftLauncher.ViewModels;
  6. public enum MessageBoxButtons
  7. {
  8. Ok,
  9. OkCancel,
  10. YesNo
  11. }
  12. public class MessageWindowViewModel : ViewModelBase
  13. {
  14. public MessageWindowViewModel()
  15. {
  16. SetButtons(MessageBoxButtons.Ok);
  17. Title = "Message";
  18. Message = "Error";
  19. ErrorTrace = "ErrorTrace\n1\n2\n3\n4\n5";
  20. IsErrorTraceVisible = false;
  21. ButtonText = "Open log";
  22. CenterMessage = true;
  23. _logfile = "";
  24. }
  25. public MessageWindowViewModel(string message, string title, MessageBoxButtons buttons = MessageBoxButtons.Ok, string errorTrace = "", string logfile = "")
  26. {
  27. SetButtons(buttons);
  28. Title = title;
  29. Message = message;
  30. ErrorTrace = errorTrace;
  31. if (string.IsNullOrEmpty(errorTrace))
  32. {
  33. IsErrorTraceVisible = false;
  34. CenterMessage = true;
  35. }
  36. else
  37. {
  38. IsErrorTraceVisible = true;
  39. CenterMessage = false;
  40. }
  41. //IsErrorTraceVisible = isErrorTraceVisible;
  42. //CenterMessage = centerMessage;
  43. if (!string.IsNullOrEmpty(logfile))
  44. {
  45. _logfile = logfile;
  46. ButtonText = "Open folder";
  47. this.RaisePropertyChanged(nameof(IsLogButtonVisible));
  48. }
  49. }
  50. private string _message = string.Empty;
  51. private string _errorTrace = string.Empty;
  52. private bool _isErrorTraceVisible = false;
  53. private bool _centerMessage = false;
  54. private string _logfile = string.Empty;
  55. public string ErrorTrace
  56. {
  57. get => _errorTrace;
  58. set => this.RaiseAndSetIfChanged(ref _errorTrace, value);
  59. }
  60. public string Message
  61. {
  62. get => _message;
  63. set => this.RaiseAndSetIfChanged(ref _message, value);
  64. }
  65. public bool CenterMessage
  66. {
  67. get => _centerMessage;
  68. set => this.RaiseAndSetIfChanged(ref _centerMessage, value);
  69. }
  70. public bool IsErrorTraceVisible
  71. {
  72. get => _isErrorTraceVisible;
  73. set => this.RaiseAndSetIfChanged(ref _isErrorTraceVisible, value);
  74. }
  75. public HorizontalAlignment HorizontalAlignment
  76. {
  77. get => CenterMessage ? HorizontalAlignment.Center : HorizontalAlignment.Stretch;
  78. }
  79. public VerticalAlignment VerticalAlignment
  80. {
  81. get => CenterMessage ? VerticalAlignment.Center : VerticalAlignment.Stretch;
  82. }
  83. public string Title { get; set; } = "Message";
  84. public string ButtonText { get; set; } = string.Empty;
  85. public string ButtonOk { get; set; } = "Ok";
  86. public string ButtonCancel { get; set; } = "Cancel";
  87. public bool IsCancelButtonVisible { get; set; } = false;
  88. public bool IsLogButtonVisible
  89. {
  90. get => !string.IsNullOrEmpty(_logfile);
  91. }
  92. private void SetButtons(MessageBoxButtons buttons)
  93. {
  94. switch (buttons)
  95. {
  96. case MessageBoxButtons.Ok:
  97. ButtonOk = "Ok";
  98. IsCancelButtonVisible = false;
  99. break;
  100. case MessageBoxButtons.OkCancel:
  101. ButtonOk = "Ok";
  102. ButtonCancel = "Cancel";
  103. IsCancelButtonVisible = true;
  104. break;
  105. case MessageBoxButtons.YesNo:
  106. ButtonOk = "Yes";
  107. ButtonCancel = "No";
  108. IsCancelButtonVisible = true;
  109. break;
  110. }
  111. }
  112. public void OpenLogFile()
  113. {
  114. if (Path.Exists(_logfile))
  115. {
  116. System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() { FileName = _logfile, UseShellExecute = true });
  117. }
  118. }
  119. public void CloseWindow(object window)
  120. {
  121. ((Window)window)?.Close();
  122. }
  123. public void CloseWindowOk(object window)
  124. {
  125. ((Window)window)?.Close(true);
  126. }
  127. public void CloseWindowCancel(object window)
  128. {
  129. ((Window)window)?.Close(false);
  130. }
  131. }