NavMapBeaconWindow.xaml.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Content.Client.UserInterface.Controls;
  2. using Content.Shared.Pinpointer;
  3. using Content.Shared.Preferences;
  4. using Robust.Client.AutoGenerated;
  5. using Robust.Client.UserInterface.Controls;
  6. using Robust.Client.UserInterface.XAML;
  7. namespace Content.Client.Pinpointer.UI;
  8. [GenerateTypedNameReferences]
  9. public sealed partial class NavMapBeaconWindow : FancyWindow
  10. {
  11. private string? _defaultLabel;
  12. private bool _defaultEnabled;
  13. private Color _defaultColor;
  14. public event Action<string?, bool, Color>? OnApplyButtonPressed;
  15. public NavMapBeaconWindow()
  16. {
  17. RobustXamlLoader.Load(this);
  18. IoCManager.InjectDependencies(this);
  19. VisibleButton.OnPressed += args => UpdateVisibleButton(args.Button.Pressed);
  20. LabelLineEdit.OnTextChanged += OnTextChanged;
  21. ColorSelector.OnColorChanged += _ => TryEnableApplyButton();
  22. TryEnableApplyButton();
  23. ApplyButton.OnPressed += OnApplyPressed;
  24. }
  25. public void SetEntity(EntityUid uid, NavMapBeaconComponent navMap)
  26. {
  27. _defaultLabel = navMap.Text;
  28. _defaultEnabled = navMap.Enabled;
  29. _defaultColor = navMap.Color;
  30. UpdateVisibleButton(navMap.Enabled);
  31. LabelLineEdit.Text = navMap.Text ?? string.Empty;
  32. ColorSelector.Color = navMap.Color;
  33. }
  34. private void UpdateVisibleButton(bool value)
  35. {
  36. VisibleButton.Pressed = value;
  37. VisibleButton.Text = Loc.GetString(value
  38. ? "nav-beacon-toggle-visible"
  39. : "nav-beacon-toggle-invisible");
  40. TryEnableApplyButton();
  41. }
  42. private void OnTextChanged(LineEdit.LineEditEventArgs obj)
  43. {
  44. if (obj.Text.Length > HumanoidCharacterProfile.MaxNameLength)
  45. obj.Control.Text = obj.Text.Substring(0, HumanoidCharacterProfile.MaxNameLength);
  46. TryEnableApplyButton();
  47. }
  48. private void TryEnableApplyButton()
  49. {
  50. ApplyButton.Disabled = LabelLineEdit.Text == (_defaultLabel ?? string.Empty) &&
  51. VisibleButton.Pressed == _defaultEnabled &&
  52. ColorSelector.Color == _defaultColor;
  53. }
  54. private void OnApplyPressed(BaseButton.ButtonEventArgs obj)
  55. {
  56. _defaultLabel = LabelLineEdit.Text == string.Empty ? null : LabelLineEdit.Text;
  57. _defaultEnabled = VisibleButton.Pressed;
  58. _defaultColor = ColorSelector.Color;
  59. OnApplyButtonPressed?.Invoke(_defaultLabel, _defaultEnabled, _defaultColor);
  60. TryEnableApplyButton();
  61. }
  62. }