mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 15:47:26 +00:00
Merge pull request #1120 from oooielp/label-invert (#783) Co-authored-by: Khaomi <46065349+Khaomi@users.noreply.github.com> Co-authored-by: Superlagg <sprambersonson@gmail.com>
184 lines
5.9 KiB
C#
184 lines
5.9 KiB
C#
using Robust.Client.UserInterface.CustomControls;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Client.UserInterface.Controls; // Starlight
|
|
using Robust.Shared.Configuration; // Starlight
|
|
using Content.Shared.Starlight.CCVar; // Starlight
|
|
|
|
namespace Content.Client.Labels.UI
|
|
{
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class HandLabelerWindow : DefaultWindow
|
|
{
|
|
[Dependency] private readonly IConfigurationManager _cfg = default!; // Starlight
|
|
|
|
public event Action<string>? OnLabelChanged;
|
|
public event Action<string>? OnLabelSelected; // Starlight
|
|
|
|
/// <summary>
|
|
/// Is the user currently entering text into the control?
|
|
/// </summary>
|
|
private bool _focused;
|
|
// TODO LineEdit Make this a bool on the LineEdit control
|
|
|
|
private string _label = string.Empty;
|
|
private string _initialLabel = string.Empty;
|
|
private bool _deleteMode = false; // Starlight
|
|
private List<string> _savedLabels = []; // Starlight
|
|
|
|
public HandLabelerWindow()
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
IoCManager.InjectDependencies(this); // Starlight
|
|
LoadSavedLabelsFromCVar(); // Starlight
|
|
|
|
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);
|
|
|
|
// Starlight Begin
|
|
SaveLabelButton.OnPressed += _ =>
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(_label) && !_savedLabels.Contains(_label))
|
|
{
|
|
_savedLabels.Add(_label);
|
|
SaveSavedLabelsToCVar();
|
|
UpdateSavedLabels(_savedLabels);
|
|
}
|
|
};
|
|
|
|
DeleteLabelButton.OnPressed += _ =>
|
|
{
|
|
_deleteMode = !_deleteMode;
|
|
DeleteLabelButton.Pressed = _deleteMode;
|
|
UpdateButtons();
|
|
};
|
|
|
|
SavedLabelsList.OnItemSelected += args =>
|
|
{
|
|
if (_deleteMode)
|
|
{
|
|
_savedLabels.RemoveAt(args.ItemIndex);
|
|
SaveSavedLabelsToCVar();
|
|
UpdateSavedLabels(_savedLabels);
|
|
UpdateButtons();
|
|
}
|
|
else
|
|
{
|
|
if (SavedLabelsList[args.ItemIndex].Metadata is string label)
|
|
{
|
|
OnLabelSelected?.Invoke(label);
|
|
}
|
|
}
|
|
}; // Starlight End
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
// Starlight begin
|
|
public void UpdateSavedLabels(List<string> labels)
|
|
{
|
|
var items = new List<ItemList.Item>();
|
|
foreach (var label in labels)
|
|
{
|
|
var item = new ItemList.Item(SavedLabelsList)
|
|
{
|
|
Text = label,
|
|
Metadata = label
|
|
};
|
|
items.Add(item);
|
|
}
|
|
SavedLabelsList.SetItems(items);
|
|
UpdateButtons();
|
|
}
|
|
// Starlight end
|
|
|
|
public void UpdateButtons()
|
|
{
|
|
ResetLabelButton.Disabled = (LabelLineEdit.Text == _initialLabel);
|
|
ClearLabelButton.Disabled = (LabelLineEdit.Text == "");
|
|
|
|
// Starlight begin
|
|
var labelExists = false;
|
|
foreach (var item in SavedLabelsList)
|
|
{
|
|
if ((item.Metadata as string) == _label.Trim())
|
|
{
|
|
labelExists = true;
|
|
break;
|
|
}
|
|
}
|
|
SaveLabelButton.Disabled = string.IsNullOrWhiteSpace(_label) || labelExists;
|
|
|
|
DeleteLabelButton.Text = _deleteMode
|
|
? Loc.GetString("hand-labeler-delete-mode-text")
|
|
: Loc.GetString("hand-labeler-delete-label-text");
|
|
|
|
// Starlight end
|
|
}
|
|
public void SetMaxLabelLength(int maxLength)
|
|
{
|
|
LabelLineEdit.IsValid = s => s.Length <= maxLength;
|
|
}
|
|
// Starlight begin
|
|
private void LoadSavedLabelsFromCVar()
|
|
{
|
|
var savedLabelsStr = _cfg.GetCVar(StarlightCCVars.HandLabelerSavedLabels);
|
|
if (!string.IsNullOrEmpty(savedLabelsStr))
|
|
{
|
|
_savedLabels = new List<string>(savedLabelsStr.Split('\n', StringSplitOptions.RemoveEmptyEntries));
|
|
UpdateSavedLabels(_savedLabels);
|
|
}
|
|
}
|
|
|
|
private void SaveSavedLabelsToCVar()
|
|
{
|
|
var savedLabelsStr = string.Join('\n', _savedLabels);
|
|
_cfg.SetCVar(StarlightCCVars.HandLabelerSavedLabels, savedLabelsStr);
|
|
_cfg.SaveToFile();
|
|
}
|
|
// Starlight end
|
|
}
|
|
}
|