AdminMessagePopupWindow.xaml.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Content.Client.Stylesheets;
  2. using Content.Shared.Administration.Notes;
  3. using Robust.Client.AutoGenerated;
  4. using Robust.Client.UserInterface;
  5. using Robust.Client.UserInterface.Controls;
  6. using Robust.Client.UserInterface.XAML;
  7. using Robust.Shared.Timing;
  8. using Robust.Shared.Utility;
  9. namespace Content.Client.Administration.UI.AdminRemarks;
  10. [GenerateTypedNameReferences]
  11. public sealed partial class AdminMessagePopupWindow : Control
  12. {
  13. private float _timer = float.MaxValue;
  14. public event Action? OnDismissPressed;
  15. public event Action? OnAcceptPressed;
  16. public AdminMessagePopupWindow()
  17. {
  18. RobustXamlLoader.Load(this);
  19. Stylesheet = IoCManager.Resolve<IStylesheetManager>().SheetSpace;
  20. AcceptButton.OnPressed += OnAcceptButtonPressed;
  21. DismissButton.OnPressed += OnDismissButtonPressed;
  22. }
  23. public float Timer
  24. {
  25. get => _timer;
  26. private set
  27. {
  28. WaitLabel.Text = Loc.GetString("admin-notes-message-wait", ("time", MathF.Floor(value)));
  29. _timer = value;
  30. }
  31. }
  32. public void SetState(AdminMessageEuiState state)
  33. {
  34. Timer = (float) state.Time.TotalSeconds;
  35. MessageContainer.RemoveAllChildren();
  36. foreach (var message in state.Messages)
  37. {
  38. MessageContainer.AddChild(new AdminMessagePopupMessage(message));
  39. }
  40. Description.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("admin-notes-message-desc", ("count", state.Messages.Length))));
  41. }
  42. private void OnDismissButtonPressed(BaseButton.ButtonEventArgs obj)
  43. {
  44. OnDismissPressed?.Invoke();
  45. }
  46. private void OnAcceptButtonPressed(BaseButton.ButtonEventArgs obj)
  47. {
  48. OnAcceptPressed?.Invoke();
  49. }
  50. protected override void FrameUpdate(FrameEventArgs args)
  51. {
  52. base.FrameUpdate(args);
  53. if (!AcceptButton.Disabled)
  54. return;
  55. if (Timer > 0.0)
  56. {
  57. if (Timer - args.DeltaSeconds < 0)
  58. Timer = 0;
  59. else
  60. Timer -= args.DeltaSeconds;
  61. }
  62. else
  63. {
  64. AcceptButton.Disabled = false;
  65. DismissButton.Disabled = false;
  66. }
  67. }
  68. }