using Microsoft.Xna.Framework; using MLEM.Ui.Style; namespace MLEM.Ui.Elements { /// /// A radio button element to use inside of a . /// A radio button is a variation of a that causes all other radio buttons in the same to be deselected upon selection. /// public class RadioButton : Checkbox { /// /// The group that this radio button has. /// All other radio buttons in the same that have the same group will be deselected when this radio button is selected. /// public string Group; /// /// Creates a new radio button with the given settings /// /// The radio button's anchor /// The radio button's size /// The label to display next to the radio button /// If the radio button should be checked by default /// The group that the radio button has public RadioButton(Anchor anchor, Vector2 size, string label, bool defaultChecked = false, string group = "") : base(anchor, size, label, defaultChecked) { this.Group = group; // don't += because we want to override the checking + unchecking behavior of Checkbox this.OnPressed = element => { this.Checked = true; foreach (var sib in this.GetSiblings()) { if (sib is RadioButton radio && radio.Group == this.Group) radio.Checked = false; } }; } /// protected override void InitStyle(UiStyle style) { base.InitStyle(style); this.Texture.SetFromStyle(style.RadioTexture); this.HoveredTexture.SetFromStyle(style.RadioHoveredTexture); this.HoveredColor.SetFromStyle(style.RadioHoveredColor); this.Checkmark.SetFromStyle(style.RadioCheckmark); } } }