SurveillanceCameraSetupWindow.xaml.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Content.Shared.DeviceNetwork;
  2. using Robust.Client.AutoGenerated;
  3. using Robust.Client.UserInterface.CustomControls;
  4. using Robust.Client.UserInterface.XAML;
  5. using Robust.Shared.Prototypes;
  6. namespace Content.Client.SurveillanceCamera.UI;
  7. [GenerateTypedNameReferences]
  8. public sealed partial class SurveillanceCameraSetupWindow : DefaultWindow
  9. {
  10. [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
  11. public Action<string>? OnNameConfirm;
  12. public Action<int>? OnNetworkConfirm;
  13. public SurveillanceCameraSetupWindow()
  14. {
  15. RobustXamlLoader.Load(this);
  16. IoCManager.InjectDependencies(this);
  17. NetworkConfirm.OnPressed += _ => OnNetworkConfirm!(NetworkSelector.SelectedId);
  18. NameConfirm.OnPressed += _ => OnNameConfirm!(DeviceName.Text);
  19. NetworkSelector.OnItemSelected += args => NetworkSelector.SelectId(args.Id);
  20. }
  21. public void HideNameSelector() => NamingSection.Visible = false;
  22. public void UpdateState(string name, bool disableNaming, bool disableNetworkSelector)
  23. {
  24. DeviceName.Text = name;
  25. DeviceName.Editable = !disableNaming;
  26. NameConfirm.Disabled = disableNaming;
  27. NetworkSelector.Disabled = disableNetworkSelector;
  28. NetworkConfirm.Disabled = disableNetworkSelector;
  29. }
  30. // Pass in a list of frequency prototype IDs.
  31. public void LoadAvailableNetworks(uint currentNetwork, List<string> networks)
  32. {
  33. NetworkSelector.Clear();
  34. if (networks.Count == 0)
  35. {
  36. NetworkSection.Visible = false;
  37. return;
  38. }
  39. var id = 0;
  40. var idList = new List<(int id, string networkName)>();
  41. foreach (var network in networks)
  42. {
  43. idList.Add((id, network));
  44. id++;
  45. }
  46. idList.Sort((a, b) => string.Compare(a.networkName, b.networkName, StringComparison.Ordinal));
  47. foreach (var (networkId, network) in idList)
  48. {
  49. if (!_prototypeManager.TryIndex(network, out DeviceFrequencyPrototype? frequency)
  50. || frequency.Name == null)
  51. {
  52. continue;
  53. }
  54. NetworkSelector.AddItem(Loc.GetString(frequency.Name), networkId);
  55. if (frequency.Frequency == currentNetwork)
  56. {
  57. NetworkSelector.SelectId(networkId);
  58. }
  59. id++;
  60. }
  61. }
  62. }