1
0

CrimeHistoryWindow.xaml.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Content.Shared.Administration;
  2. using Content.Shared.CriminalRecords;
  3. using Content.Client.UserInterface.Controls;
  4. using Robust.Client.AutoGenerated;
  5. using Robust.Client.UserInterface.XAML;
  6. namespace Content.Client.CriminalRecords;
  7. /// <summary>
  8. /// Window opened when Crime History button is pressed
  9. /// </summary>
  10. [GenerateTypedNameReferences]
  11. public sealed partial class CrimeHistoryWindow : FancyWindow
  12. {
  13. public Action<string>? OnAddHistory;
  14. public Action<uint>? OnDeleteHistory;
  15. private uint _maxLength;
  16. private uint? _index;
  17. private DialogWindow? _dialog;
  18. public CrimeHistoryWindow(uint maxLength)
  19. {
  20. RobustXamlLoader.Load(this);
  21. _maxLength = maxLength;
  22. OnClose += () =>
  23. {
  24. _dialog?.Close();
  25. // deselect so when reopening the window it doesnt try to use invalid index
  26. _index = null;
  27. };
  28. AddButton.OnPressed += _ =>
  29. {
  30. if (_dialog != null)
  31. {
  32. _dialog.MoveToFront();
  33. return;
  34. }
  35. var field = "line";
  36. var prompt = Loc.GetString("criminal-records-console-reason");
  37. var placeholder = Loc.GetString("criminal-records-history-placeholder");
  38. var entry = new QuickDialogEntry(field, QuickDialogEntryType.LongText, prompt, placeholder);
  39. var entries = new List<QuickDialogEntry> { entry };
  40. _dialog = new DialogWindow(Title!, entries);
  41. _dialog.OnConfirmed += responses =>
  42. {
  43. var line = responses[field];
  44. if (line.Length < 1 || line.Length > _maxLength)
  45. return;
  46. OnAddHistory?.Invoke(line);
  47. // adding deselects so prevent deleting yeah
  48. _index = null;
  49. DeleteButton.Disabled = true;
  50. };
  51. // prevent MoveToFront being called on a closed window and double closing
  52. _dialog.OnClose += () => { _dialog = null; };
  53. };
  54. DeleteButton.OnPressed += _ =>
  55. {
  56. if (_index is not {} index)
  57. return;
  58. OnDeleteHistory?.Invoke(index);
  59. // prevent total spam wiping
  60. History.ClearSelected();
  61. _index = null;
  62. DeleteButton.Disabled = true;
  63. };
  64. History.OnItemSelected += args =>
  65. {
  66. _index = (uint) args.ItemIndex;
  67. DeleteButton.Disabled = false;
  68. };
  69. History.OnItemDeselected += args =>
  70. {
  71. _index = null;
  72. DeleteButton.Disabled = true;
  73. };
  74. }
  75. public void UpdateHistory(CriminalRecord record, bool access)
  76. {
  77. History.Clear();
  78. Editing.Visible = access;
  79. NoHistory.Visible = record.History.Count == 0;
  80. foreach (var entry in record.History)
  81. {
  82. var time = entry.AddTime;
  83. var line = $"{time.Hours:00}:{time.Minutes:00}:{time.Seconds:00} - {entry.Crime}";
  84. History.AddItem(line);
  85. }
  86. // deselect if something goes wrong
  87. if (_index is {} index && record.History.Count >= index)
  88. _index = null;
  89. }
  90. }