using System;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.Chemistry.UI;
///
/// Creates a grid of buttons given a comma-seperated list of Text
///
public sealed class ButtonGrid : GridContainer
{
private string _buttonList = "";
///
/// A comma-seperated list of text to use for each button. These will be inserted sequentially.
///
public string ButtonList
{
get => _buttonList;
set
{
_buttonList = value;
Update();
}
}
public bool RadioGroup { get; set; } = false;
private string? _selected;
///
/// Which button is currently selected. Only matters when is true.
///
public string? Selected
{
get => _selected;
set
{
_selected = value;
Update();
}
}
public Action? OnButtonPressed;
///
///
///
public new int Columns
{
get => base.Columns;
set
{
base.Columns = value;
Update();
}
}
///
///
///
public new int Rows
{
get => base.Rows;
set
{
base.Rows = value;
Update();
}
}
private void Update()
{
if (ButtonList == "")
return;
this.Children.Clear();
var i = 0;
var list = ButtonList.Split(",");
var group = new ButtonGroup();
foreach (var button in list)
{
var btn = new Button();
btn.Text = button;
btn.OnPressed += _ =>
{
if (RadioGroup)
btn.Pressed = true;
Selected = button;
OnButtonPressed?.Invoke(button);
};
if (button == Selected)
btn.Pressed = true;
var sep = HSeparationOverride ?? 0;
// ReSharper disable once PossibleLossOfFraction
// btn.SetWidth = (this.PixelWidth - sep * (Columns - 1)) / 3;
btn.Group = group;
var row = i / Columns;
var col = i % Columns;
var last = i == list.Length - 1;
var lastCol = i == Columns - 1;
var lastRow = row == list.Length / Columns - 1;
if (row == 0 && (lastCol || last))
btn.AddStyleClass("OpenLeft");
else if (col == 0 && lastRow)
btn.AddStyleClass("OpenRight");
else
btn.AddStyleClass("OpenBoth");
this.Children.Add(btn);
i++;
}
}
}