NanoTaskUi.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Linq;
  2. using Content.Client.UserInterface.Fragments;
  3. using Content.Shared.CartridgeLoader;
  4. using Content.Shared.CartridgeLoader.Cartridges;
  5. using Robust.Client.GameObjects;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.CartridgeLoader.Cartridges;
  8. /// <summary>
  9. /// UI fragment responsible for displaying NanoTask controls in a PDA and coordinating with the NanoTaskCartridgeSystem for state
  10. /// </summary>
  11. public sealed partial class NanoTaskUi : UIFragment
  12. {
  13. private NanoTaskUiFragment? _fragment;
  14. private NanoTaskItemPopup? _popup;
  15. public override Control GetUIFragmentRoot()
  16. {
  17. return _fragment!;
  18. }
  19. public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner)
  20. {
  21. _fragment = new NanoTaskUiFragment();
  22. _popup = new NanoTaskItemPopup();
  23. _fragment.NewTask += () =>
  24. {
  25. _popup.ResetInputs(null);
  26. _popup.SetEditingTaskId(null);
  27. _popup.OpenCentered();
  28. };
  29. _fragment.OpenTask += id =>
  30. {
  31. if (_fragment.Tasks.Find(task => task.Id == id) is not NanoTaskItemAndId task)
  32. return;
  33. _popup.ResetInputs(task.Data);
  34. _popup.SetEditingTaskId(task.Id);
  35. _popup.OpenCentered();
  36. };
  37. _fragment.ToggleTaskCompletion += id =>
  38. {
  39. if (_fragment.Tasks.Find(task => task.Id == id) is not NanoTaskItemAndId task)
  40. return;
  41. userInterface.SendMessage(new CartridgeUiMessage(new NanoTaskUiMessageEvent(new NanoTaskUpdateTask(new(id, new(
  42. description: task.Data.Description,
  43. taskIsFor: task.Data.TaskIsFor,
  44. isTaskDone: !task.Data.IsTaskDone,
  45. priority: task.Data.Priority
  46. ))))));
  47. };
  48. _popup.TaskSaved += (id, data) =>
  49. {
  50. userInterface.SendMessage(new CartridgeUiMessage(new NanoTaskUiMessageEvent(new NanoTaskUpdateTask(new(id, data)))));
  51. _popup.Close();
  52. };
  53. _popup.TaskDeleted += id =>
  54. {
  55. userInterface.SendMessage(new CartridgeUiMessage(new NanoTaskUiMessageEvent(new NanoTaskDeleteTask(id))));
  56. _popup.Close();
  57. };
  58. _popup.TaskCreated += data =>
  59. {
  60. userInterface.SendMessage(new CartridgeUiMessage(new NanoTaskUiMessageEvent(new NanoTaskAddTask(data))));
  61. _popup.Close();
  62. };
  63. _popup.TaskPrinted += data =>
  64. {
  65. userInterface.SendMessage(new CartridgeUiMessage(new NanoTaskUiMessageEvent(new NanoTaskPrintTask(data))));
  66. };
  67. }
  68. public override void UpdateState(BoundUserInterfaceState state)
  69. {
  70. if (state is not NanoTaskUiState nanoTaskState)
  71. return;
  72. _fragment?.UpdateState(nanoTaskState.Tasks);
  73. }
  74. }