1
0

FaxWindow.xaml.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System.Linq;
  2. using Content.Shared.Fax;
  3. using Robust.Client.AutoGenerated;
  4. using Robust.Client.UserInterface.CustomControls;
  5. using Robust.Client.UserInterface.XAML;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.Fax.UI;
  8. [GenerateTypedNameReferences]
  9. public sealed partial class FaxWindow : DefaultWindow
  10. {
  11. public event Action? FileButtonPressed;
  12. public event Action? PaperButtonPressed;
  13. public event Action? CopyButtonPressed;
  14. public event Action? SendButtonPressed;
  15. public event Action? RefreshButtonPressed;
  16. public event Action<string>? PeerSelected;
  17. public bool OfficePaper = false;
  18. public FaxWindow()
  19. {
  20. RobustXamlLoader.Load(this);
  21. PaperButtonPressed += OnPaperButtonPressed;
  22. FileButton.OnPressed += _ => FileButtonPressed?.Invoke();
  23. PaperButton.OnPressed += _ => PaperButtonPressed?.Invoke();
  24. CopyButton.OnPressed += _ => CopyButtonPressed?.Invoke();
  25. SendButton.OnPressed += _ => SendButtonPressed?.Invoke();
  26. RefreshButton.OnPressed += _ => RefreshButtonPressed?.Invoke();
  27. PeerSelector.OnItemSelected += args =>
  28. PeerSelected?.Invoke((string) args.Button.GetItemMetadata(args.Id)!);
  29. }
  30. public void UpdateState(FaxUiState state)
  31. {
  32. CopyButton.Disabled = !state.CanCopy;
  33. SendButton.Disabled = !state.CanSend;
  34. FromLabel.Text = state.DeviceName;
  35. if (state.IsPaperInserted)
  36. {
  37. PaperStatusLabel.FontColorOverride = Color.Green;
  38. PaperStatusLabel.Text = Loc.GetString("fax-machine-ui-paper-inserted");
  39. }
  40. else
  41. {
  42. PaperStatusLabel.FontColorOverride = Color.Red;
  43. PaperStatusLabel.Text = Loc.GetString("fax-machine-ui-paper-not-inserted");
  44. }
  45. if (state.AvailablePeers.Count == 0)
  46. {
  47. PeerSelector.AddItem(Loc.GetString("fax-machine-ui-no-peers"));
  48. PeerSelector.Disabled = true;
  49. }
  50. if (PeerSelector.Disabled && state.AvailablePeers.Count != 0)
  51. {
  52. PeerSelector.Clear();
  53. PeerSelector.Disabled = false;
  54. }
  55. // always must be selected destination
  56. if (string.IsNullOrEmpty(state.DestinationAddress) && state.AvailablePeers.Count != 0)
  57. {
  58. PeerSelected?.Invoke(state.AvailablePeers.First().Key);
  59. return;
  60. }
  61. if (state.AvailablePeers.Count != 0)
  62. {
  63. PeerSelector.Clear();
  64. foreach (var (address, name) in state.AvailablePeers)
  65. {
  66. var id = AddPeerSelect(name, address);
  67. if (address == state.DestinationAddress)
  68. PeerSelector.Select(id);
  69. }
  70. }
  71. }
  72. private int AddPeerSelect(string name, string address)
  73. {
  74. PeerSelector.AddItem(name);
  75. PeerSelector.SetItemMetadata(PeerSelector.ItemCount - 1, address);
  76. return PeerSelector.ItemCount - 1;
  77. }
  78. private void OnPaperButtonPressed()
  79. {
  80. OfficePaper = !OfficePaper;
  81. if(OfficePaper)
  82. PaperButton.Text = Loc.GetString("fax-machine-ui-paper-button-office");
  83. else
  84. PaperButton.Text = Loc.GetString("fax-machine-ui-paper-button-normal");
  85. }
  86. }