PdaBoundUserInterface.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using Content.Client.CartridgeLoader;
  2. using Content.Shared.CartridgeLoader;
  3. using Content.Shared.Containers.ItemSlots;
  4. using Content.Shared.PDA;
  5. using JetBrains.Annotations;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.PDA
  8. {
  9. [UsedImplicitly]
  10. public sealed class PdaBoundUserInterface : CartridgeLoaderBoundUserInterface
  11. {
  12. private readonly PdaSystem _pdaSystem;
  13. [ViewVariables]
  14. private PdaMenu? _menu;
  15. public PdaBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  16. {
  17. _pdaSystem = EntMan.System<PdaSystem>();
  18. }
  19. protected override void Open()
  20. {
  21. base.Open();
  22. if (_menu == null)
  23. CreateMenu();
  24. }
  25. private void CreateMenu()
  26. {
  27. _menu = this.CreateWindowCenteredLeft<PdaMenu>();
  28. _menu.FlashLightToggleButton.OnToggled += _ =>
  29. {
  30. SendMessage(new PdaToggleFlashlightMessage());
  31. };
  32. _menu.EjectIdButton.OnPressed += _ =>
  33. {
  34. SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaIdSlotId));
  35. };
  36. _menu.EjectPenButton.OnPressed += _ =>
  37. {
  38. SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPenSlotId));
  39. };
  40. _menu.EjectPaiButton.OnPressed += _ =>
  41. {
  42. SendPredictedMessage(new ItemSlotButtonPressedEvent(PdaComponent.PdaPaiSlotId));
  43. };
  44. _menu.ActivateMusicButton.OnPressed += _ =>
  45. {
  46. SendMessage(new PdaShowMusicMessage());
  47. };
  48. _menu.AccessRingtoneButton.OnPressed += _ =>
  49. {
  50. SendMessage(new PdaShowRingtoneMessage());
  51. };
  52. _menu.ShowUplinkButton.OnPressed += _ =>
  53. {
  54. SendMessage(new PdaShowUplinkMessage());
  55. };
  56. _menu.LockUplinkButton.OnPressed += _ =>
  57. {
  58. SendMessage(new PdaLockUplinkMessage());
  59. };
  60. _menu.OnProgramItemPressed += ActivateCartridge;
  61. _menu.OnInstallButtonPressed += InstallCartridge;
  62. _menu.OnUninstallButtonPressed += UninstallCartridge;
  63. _menu.ProgramCloseButton.OnPressed += _ => DeactivateActiveCartridge();
  64. var borderColorComponent = GetBorderColorComponent();
  65. if (borderColorComponent == null)
  66. return;
  67. _menu.BorderColor = borderColorComponent.BorderColor;
  68. _menu.AccentHColor = borderColorComponent.AccentHColor;
  69. _menu.AccentVColor = borderColorComponent.AccentVColor;
  70. }
  71. protected override void UpdateState(BoundUserInterfaceState state)
  72. {
  73. base.UpdateState(state);
  74. if (state is not PdaUpdateState updateState)
  75. return;
  76. if (_menu == null)
  77. {
  78. _pdaSystem.Log.Error("PDA state received before menu was created.");
  79. return;
  80. }
  81. _menu.UpdateState(updateState);
  82. }
  83. protected override void AttachCartridgeUI(Control cartridgeUIFragment, string? title)
  84. {
  85. _menu?.ProgramView.AddChild(cartridgeUIFragment);
  86. _menu?.ToProgramView(title ?? Loc.GetString("comp-pda-io-program-fallback-title"));
  87. }
  88. protected override void DetachCartridgeUI(Control cartridgeUIFragment)
  89. {
  90. if (_menu is null)
  91. return;
  92. _menu.ToHomeScreen();
  93. _menu.HideProgramHeader();
  94. _menu.ProgramView.RemoveChild(cartridgeUIFragment);
  95. }
  96. protected override void UpdateAvailablePrograms(List<(EntityUid, CartridgeComponent)> programs)
  97. {
  98. _menu?.UpdateAvailablePrograms(programs);
  99. }
  100. private PdaBorderColorComponent? GetBorderColorComponent()
  101. {
  102. return EntMan.GetComponentOrNull<PdaBorderColorComponent>(Owner);
  103. }
  104. }
  105. }