1
0

VoiceMaskNameChangeWindow.xaml.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Content.Client.UserInterface.Controls;
  2. using Content.Shared.Speech;
  3. using Robust.Client.AutoGenerated;
  4. using Robust.Client.UserInterface.CustomControls;
  5. using Robust.Client.UserInterface.XAML;
  6. using Robust.Shared.Prototypes;
  7. namespace Content.Client.VoiceMask;
  8. [GenerateTypedNameReferences]
  9. public sealed partial class VoiceMaskNameChangeWindow : FancyWindow
  10. {
  11. public Action<string>? OnNameChange;
  12. public Action<string?>? OnVerbChange;
  13. private List<(string, string)> _verbs = new();
  14. private string? _verb;
  15. public VoiceMaskNameChangeWindow()
  16. {
  17. RobustXamlLoader.Load(this);
  18. NameSelectorSet.OnPressed += _ =>
  19. {
  20. OnNameChange?.Invoke(NameSelector.Text);
  21. };
  22. SpeechVerbSelector.OnItemSelected += args =>
  23. {
  24. OnVerbChange?.Invoke((string?) args.Button.GetItemMetadata(args.Id));
  25. SpeechVerbSelector.SelectId(args.Id);
  26. };
  27. }
  28. public void ReloadVerbs(IPrototypeManager proto)
  29. {
  30. foreach (var verb in proto.EnumeratePrototypes<SpeechVerbPrototype>())
  31. {
  32. _verbs.Add((Loc.GetString(verb.Name), verb.ID));
  33. }
  34. _verbs.Sort((a, b) => a.Item1.CompareTo(b.Item1));
  35. }
  36. public void AddVerbs()
  37. {
  38. SpeechVerbSelector.Clear();
  39. AddVerb(Loc.GetString("chat-speech-verb-name-none"), null);
  40. foreach (var (name, id) in _verbs)
  41. {
  42. AddVerb(name, id);
  43. }
  44. }
  45. private void AddVerb(string name, string? verb)
  46. {
  47. var id = SpeechVerbSelector.ItemCount;
  48. SpeechVerbSelector.AddItem(name);
  49. if (verb is {} metadata)
  50. SpeechVerbSelector.SetItemMetadata(id, metadata);
  51. if (verb == _verb)
  52. SpeechVerbSelector.SelectId(id);
  53. }
  54. public void UpdateState(string name, string? verb)
  55. {
  56. NameSelector.Text = name;
  57. _verb = verb;
  58. for (int id = 0; id < SpeechVerbSelector.ItemCount; id++)
  59. {
  60. if (string.Equals(verb, SpeechVerbSelector.GetItemMetadata(id)))
  61. {
  62. SpeechVerbSelector.SelectId(id);
  63. break;
  64. }
  65. }
  66. }
  67. }