using Robust.Client.UserInterface.CustomControls; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; namespace Content.Client.Labels.UI { [GenerateTypedNameReferences] public sealed partial class HandLabelerWindow : DefaultWindow { public event Action? OnLabelChanged; /// /// Is the user currently entering text into the control? /// private bool _focused; // TODO LineEdit Make this a bool on the LineEdit control private string _label = string.Empty; private string _initialLabel = string.Empty; public HandLabelerWindow() { RobustXamlLoader.Load(this); LabelLineEdit.OnTextChanged += e => { _label = e.Text; OnLabelChanged?.Invoke(_label); UpdateButtons(); }; LabelLineEdit.OnFocusEnter += _ => _focused = true; LabelLineEdit.OnFocusExit += _ => { _focused = false; LabelLineEdit.Text = _label; }; ResetLabelButton.OnPressed += _ => LabelLineEdit.SetText(_initialLabel, true); ClearLabelButton.OnPressed += _ => LabelLineEdit.SetText("", true); } protected override void Opened() { base.Opened(); // Give the editor keyboard focus, since that's the only // thing the user will want to be doing with this UI LabelLineEdit.GrabKeyboardFocus(); } public void SetCurrentLabel(string label) { if (label == _label) return; _label = label; if (!_focused) { LabelLineEdit.Text = label; UpdateButtons(); } } public void SetInitialLabelState() { LabelLineEdit.Text = _label; LabelLineEdit.CursorPosition = _label.Length; LabelLineEdit.SelectionStart = 0; _initialLabel = _label; UpdateButtons(); } public void UpdateButtons() { ResetLabelButton.Disabled = (LabelLineEdit.Text == _initialLabel); ClearLabelButton.Disabled = (LabelLineEdit.Text == ""); } public void SetMaxLabelLength(int maxLength) { LabelLineEdit.IsValid = s => s.Length <= maxLength; } } }