1
0

NanoTaskItemPopup.xaml.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System.Linq;
  2. using Robust.Client.AutoGenerated;
  3. using Robust.Client.UserInterface.CustomControls;
  4. using Robust.Client.UserInterface.XAML;
  5. using Robust.Client.UserInterface.Controls;
  6. using Content.Shared.CartridgeLoader.Cartridges;
  7. namespace Content.Client.CartridgeLoader.Cartridges;
  8. /// <summary>
  9. /// Popup displayed to edit a NanoTask item
  10. /// </summary>
  11. [GenerateTypedNameReferences]
  12. public sealed partial class NanoTaskItemPopup : DefaultWindow
  13. {
  14. private readonly ButtonGroup _priorityGroup = new();
  15. private int? _editingTaskId = null;
  16. public Action<int, NanoTaskItem>? TaskSaved;
  17. public Action<int>? TaskDeleted;
  18. public Action<NanoTaskItem>? TaskCreated;
  19. public Action<NanoTaskItem>? TaskPrinted;
  20. private NanoTaskItem MakeItem()
  21. {
  22. return new(
  23. description: DescriptionInput.Text,
  24. taskIsFor: RequesterInput.Text,
  25. isTaskDone: false,
  26. priority: _priorityGroup.Pressed switch {
  27. var item when item == LowButton => NanoTaskPriority.Low,
  28. var item when item == MediumButton => NanoTaskPriority.Medium,
  29. var item when item == HighButton => NanoTaskPriority.High,
  30. _ => NanoTaskPriority.Medium,
  31. }
  32. );
  33. }
  34. public NanoTaskItemPopup()
  35. {
  36. RobustXamlLoader.Load(this);
  37. LowButton.Group = _priorityGroup;
  38. MediumButton.Group = _priorityGroup;
  39. HighButton.Group = _priorityGroup;
  40. CancelButton.OnPressed += _ => Close();
  41. DeleteButton.OnPressed += _ =>
  42. {
  43. if (_editingTaskId is int id)
  44. {
  45. TaskDeleted?.Invoke(id);
  46. }
  47. };
  48. PrintButton.OnPressed += _ =>
  49. {
  50. TaskPrinted?.Invoke(MakeItem());
  51. };
  52. SaveButton.OnPressed += _ =>
  53. {
  54. if (_editingTaskId is int id)
  55. {
  56. TaskSaved?.Invoke(id, MakeItem());
  57. }
  58. else
  59. {
  60. TaskCreated?.Invoke(MakeItem());
  61. }
  62. };
  63. DescriptionInput.OnTextChanged += args =>
  64. {
  65. if (args.Text.Length > NanoTaskItem.MaximumStringLength)
  66. DescriptionInput.Text = args.Text[..NanoTaskItem.MaximumStringLength];
  67. };
  68. RequesterInput.OnTextChanged += args =>
  69. {
  70. if (args.Text.Length > NanoTaskItem.MaximumStringLength)
  71. RequesterInput.Text = args.Text[..NanoTaskItem.MaximumStringLength];
  72. };
  73. }
  74. public void SetEditingTaskId(int? id)
  75. {
  76. _editingTaskId = id;
  77. DeleteButton.Visible = id is not null;
  78. }
  79. public void ResetInputs(NanoTaskItem? item)
  80. {
  81. if (item is NanoTaskItem task)
  82. {
  83. var button = task.Priority switch {
  84. NanoTaskPriority.High => HighButton,
  85. NanoTaskPriority.Medium => MediumButton,
  86. NanoTaskPriority.Low => LowButton,
  87. };
  88. button.Pressed = true;
  89. DescriptionInput.Text = task.Description;
  90. RequesterInput.Text = task.TaskIsFor;
  91. }
  92. else
  93. {
  94. MediumButton.Pressed = true;
  95. DescriptionInput.Text = "";
  96. RequesterInput.Text = "";
  97. }
  98. }
  99. }