using Content.Client.UserInterface.Controls; using Content.Shared.Speech; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Prototypes; namespace Content.Client.VoiceMask; [GenerateTypedNameReferences] public sealed partial class VoiceMaskNameChangeWindow : FancyWindow { public Action? OnNameChange; public Action? OnVerbChange; private List<(string, string)> _verbs = new(); private string? _verb; public VoiceMaskNameChangeWindow() { RobustXamlLoader.Load(this); NameSelectorSet.OnPressed += _ => { OnNameChange?.Invoke(NameSelector.Text); }; SpeechVerbSelector.OnItemSelected += args => { OnVerbChange?.Invoke((string?) args.Button.GetItemMetadata(args.Id)); SpeechVerbSelector.SelectId(args.Id); }; } public void ReloadVerbs(IPrototypeManager proto) { foreach (var verb in proto.EnumeratePrototypes()) { _verbs.Add((Loc.GetString(verb.Name), verb.ID)); } _verbs.Sort((a, b) => a.Item1.CompareTo(b.Item1)); } public void AddVerbs() { SpeechVerbSelector.Clear(); AddVerb(Loc.GetString("chat-speech-verb-name-none"), null); foreach (var (name, id) in _verbs) { AddVerb(name, id); } } private void AddVerb(string name, string? verb) { var id = SpeechVerbSelector.ItemCount; SpeechVerbSelector.AddItem(name); if (verb is {} metadata) SpeechVerbSelector.SetItemMetadata(id, metadata); if (verb == _verb) SpeechVerbSelector.SelectId(id); } public void UpdateState(string name, string? verb) { NameSelector.Text = name; _verb = verb; for (int id = 0; id < SpeechVerbSelector.ItemCount; id++) { if (string.Equals(verb, SpeechVerbSelector.GetItemMetadata(id))) { SpeechVerbSelector.SelectId(id); break; } } } }