177 lines
6.4 KiB
C#
177 lines
6.4 KiB
C#
using Content.Client.Eui;
|
|
using Content.Shared.Administration;
|
|
using Content.Shared.Chemistry.Reagent;
|
|
using Content.Shared.Eui;
|
|
using Content.Shared.FixedPoint;
|
|
using JetBrains.Annotations;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.CustomControls;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Localization;
|
|
using Robust.Shared.Prototypes;
|
|
using static Robust.Client.UserInterface.Controls.BoxContainer;
|
|
|
|
namespace Content.Client.Administration.UI
|
|
{
|
|
[UsedImplicitly]
|
|
public sealed class AdminAddReagentEui : BaseEui
|
|
{
|
|
[Dependency] private readonly IPrototypeManager _prototypes = default!;
|
|
|
|
private readonly Menu _window;
|
|
|
|
public AdminAddReagentEui()
|
|
{
|
|
_window = new Menu(this);
|
|
_window.OnClose += () => SendMessage(new AdminAddReagentEuiMsg.Close());
|
|
}
|
|
|
|
public override void Opened()
|
|
{
|
|
_window.OpenCentered();
|
|
}
|
|
|
|
public override void Closed()
|
|
{
|
|
_window.Close();
|
|
}
|
|
|
|
public override void HandleState(EuiStateBase state)
|
|
{
|
|
_window.HandleState((AdminAddReagentEuiState) state);
|
|
}
|
|
|
|
private void DoAdd(bool close, string reagentId, FixedPoint2 amount)
|
|
{
|
|
SendMessage(new AdminAddReagentEuiMsg.DoAdd
|
|
{
|
|
Amount = amount,
|
|
ReagentId = reagentId,
|
|
CloseAfter = close
|
|
});
|
|
}
|
|
|
|
private sealed class Menu : SS14Window
|
|
{
|
|
private readonly AdminAddReagentEui _eui;
|
|
private readonly Label _volumeLabel;
|
|
private readonly LineEdit _reagentIdEdit;
|
|
private readonly LineEdit _amountEdit;
|
|
private readonly Label _errorLabel;
|
|
private readonly Button _addButton;
|
|
private readonly Button _addCloseButton;
|
|
|
|
public Menu(AdminAddReagentEui eui)
|
|
{
|
|
_eui = eui;
|
|
|
|
Title = Loc.GetString("admin-add-reagent-eui-title");
|
|
|
|
Contents.AddChild(new BoxContainer
|
|
{
|
|
Orientation = LayoutOrientation.Vertical,
|
|
Children =
|
|
{
|
|
new GridContainer
|
|
{
|
|
Columns = 2,
|
|
Children =
|
|
{
|
|
new Label {Text = Loc.GetString("admin-add-reagent-eui-current-volume-label") + " "},
|
|
(_volumeLabel = new Label()),
|
|
new Label {Text = Loc.GetString("admin-add-reagent-eui-reagent-label") + " "},
|
|
(_reagentIdEdit = new LineEdit {PlaceHolder = Loc.GetString("admin-add-reagent-eui-reagent-id-edit")}),
|
|
new Label {Text = Loc.GetString("admin-add-reagent-eui-amount-label") + " "},
|
|
(_amountEdit = new LineEdit
|
|
{
|
|
PlaceHolder = Loc.GetString("admin-add-reagent-eui-amount-edit"),
|
|
HorizontalExpand = true
|
|
}),
|
|
},
|
|
HorizontalExpand = true,
|
|
VerticalExpand = true
|
|
},
|
|
new BoxContainer
|
|
{
|
|
Orientation = LayoutOrientation.Horizontal,
|
|
Children =
|
|
{
|
|
(_errorLabel = new Label
|
|
{
|
|
HorizontalExpand = true,
|
|
ClipText = true
|
|
}),
|
|
|
|
(_addButton = new Button {Text = Loc.GetString("admin-add-reagent-eui-add-button")}),
|
|
(_addCloseButton = new Button {Text = Loc.GetString("admin-add-reagent-eui-add-close-button")})
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
_reagentIdEdit.OnTextChanged += _ => CheckErrors();
|
|
_amountEdit.OnTextChanged += _ => CheckErrors();
|
|
_addButton.OnPressed += _ => DoAdd(false);
|
|
_addCloseButton.OnPressed += _ => DoAdd(true);
|
|
|
|
CheckErrors();
|
|
}
|
|
|
|
private void DoAdd(bool close)
|
|
{
|
|
_eui.DoAdd(
|
|
close,
|
|
_reagentIdEdit.Text,
|
|
FixedPoint2.New(float.Parse(_amountEdit.Text)));
|
|
}
|
|
|
|
private void CheckErrors()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(_reagentIdEdit.Text))
|
|
{
|
|
DoError(Loc.GetString("admin-add-reagent-eui-no-reagent-id-error"));
|
|
return;
|
|
}
|
|
|
|
if (!_eui._prototypes.HasIndex<ReagentPrototype>(_reagentIdEdit.Text))
|
|
{
|
|
DoError(Loc.GetString("admin-add-reagent-eui-reagent-does-not-exist-error",
|
|
("reagent", _reagentIdEdit.Text)));
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(_amountEdit.Text))
|
|
{
|
|
DoError(Loc.GetString("admin-add-reagent-eui-no-reagent-amount-specified-error"));
|
|
return;
|
|
}
|
|
|
|
if (!float.TryParse(_amountEdit.Text, out _))
|
|
{
|
|
DoError(Loc.GetString("admin-add-reagent-eui-invalid-amount-error"));
|
|
return;
|
|
}
|
|
|
|
_addButton.Disabled = false;
|
|
_addCloseButton.Disabled = false;
|
|
_errorLabel.Text = string.Empty;
|
|
|
|
void DoError(string text)
|
|
{
|
|
_errorLabel.Text = text;
|
|
|
|
_addButton.Disabled = true;
|
|
_addCloseButton.Disabled = true;
|
|
}
|
|
}
|
|
|
|
public void HandleState(AdminAddReagentEuiState state)
|
|
{
|
|
_volumeLabel.Text = Loc.GetString("admin-add-reagent-eui-current-and-max-volume-label",
|
|
("currentVolume", state.CurVolume),
|
|
("maxVolume" ,state.MaxVolume));
|
|
}
|
|
}
|
|
}
|
|
}
|