1
0

AdminUIHelpers.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Threading;
  2. using Content.Client.Stylesheets;
  3. using Robust.Client.UserInterface.Controls;
  4. using Timer = Robust.Shared.Timing.Timer;
  5. namespace Content.Client.Administration.UI;
  6. public static class AdminUIHelpers
  7. {
  8. private static void ResetButton(Button button, ConfirmationData data)
  9. {
  10. data.Cancellation.Cancel();
  11. button.ModulateSelfOverride = null;
  12. button.Text = data.OriginalText;
  13. }
  14. public static bool RemoveConfirm(Button button, Dictionary<Button, ConfirmationData> confirmations)
  15. {
  16. if (confirmations.Remove(button, out var data))
  17. {
  18. ResetButton(button, data);
  19. return true;
  20. }
  21. return false;
  22. }
  23. public static void RemoveAllConfirms(Dictionary<Button, ConfirmationData> confirmations)
  24. {
  25. foreach (var (button, confirmation) in confirmations)
  26. {
  27. ResetButton(button, confirmation);
  28. }
  29. confirmations.Clear();
  30. }
  31. public static bool TryConfirm(Button button, Dictionary<Button, ConfirmationData> confirmations)
  32. {
  33. if (RemoveConfirm(button, confirmations))
  34. return true;
  35. var data = new ConfirmationData(new CancellationTokenSource(), button.Text);
  36. confirmations[button] = data;
  37. Timer.Spawn(TimeSpan.FromSeconds(5), () =>
  38. {
  39. confirmations.Remove(button);
  40. button.ModulateSelfOverride = null;
  41. button.Text = data.OriginalText;
  42. }, data.Cancellation.Token);
  43. button.ModulateSelfOverride = StyleNano.ButtonColorCautionDefault;
  44. button.Text = Loc.GetString("admin-player-actions-confirm");
  45. return false;
  46. }
  47. }
  48. public readonly record struct ConfirmationData(CancellationTokenSource Cancellation, string? OriginalText);