ObjectsTabHeader.xaml.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Robust.Client.AutoGenerated;
  2. using Robust.Client.UserInterface;
  3. using Robust.Client.UserInterface.Controls;
  4. using Robust.Client.UserInterface.XAML;
  5. using Robust.Shared.Input;
  6. namespace Content.Client.Administration.UI.Tabs.ObjectsTab
  7. {
  8. [GenerateTypedNameReferences]
  9. public sealed partial class ObjectsTabHeader : Control
  10. {
  11. public event Action<Header>? OnHeaderClicked;
  12. private const string ArrowUp = "↑";
  13. private const string ArrowDown = "↓";
  14. public ObjectsTabHeader()
  15. {
  16. RobustXamlLoader.Load(this);
  17. ObjectNameLabel.OnKeyBindDown += ObjectNameClicked;
  18. EntityIDLabel.OnKeyBindDown += EntityIDClicked;
  19. }
  20. public Label GetHeader(Header header)
  21. {
  22. return header switch
  23. {
  24. Header.ObjectName => ObjectNameLabel,
  25. Header.EntityID => EntityIDLabel,
  26. _ => throw new ArgumentOutOfRangeException(nameof(header), header, null)
  27. };
  28. }
  29. public void ResetHeaderText()
  30. {
  31. ObjectNameLabel.Text = Loc.GetString("object-tab-object-name");
  32. EntityIDLabel.Text = Loc.GetString("object-tab-entity-id");
  33. }
  34. public void UpdateHeaderSymbols(Header headerClicked, bool ascending)
  35. {
  36. ResetHeaderText();
  37. var arrow = ascending ? ArrowUp : ArrowDown;
  38. GetHeader(headerClicked).Text += $" {arrow}";
  39. }
  40. private void HeaderClicked(GUIBoundKeyEventArgs args, Header header)
  41. {
  42. if (args.Function != EngineKeyFunctions.UIClick)
  43. {
  44. return;
  45. }
  46. OnHeaderClicked?.Invoke(header);
  47. args.Handle();
  48. }
  49. private void ObjectNameClicked(GUIBoundKeyEventArgs args)
  50. {
  51. HeaderClicked(args, Header.ObjectName);
  52. }
  53. private void EntityIDClicked(GUIBoundKeyEventArgs args)
  54. {
  55. HeaderClicked(args, Header.EntityID);
  56. }
  57. protected override void Dispose(bool disposing)
  58. {
  59. base.Dispose(disposing);
  60. if (disposing)
  61. {
  62. ObjectNameLabel.OnKeyBindDown -= ObjectNameClicked;
  63. EntityIDLabel.OnKeyBindDown -= EntityIDClicked;
  64. }
  65. }
  66. public enum Header
  67. {
  68. ObjectName,
  69. EntityID
  70. }
  71. }
  72. }