using Robust.Shared.ViewVariables; using static Robust.Client.UserInterface.Controls.Label; namespace Robust.Client.UserInterface.Controls { /// /// A type of toggleable button that also has a checkbox. /// [Virtual] public class CheckBox : ContainerButton { public const string StyleClassCheckBox = "checkBox"; public const string StyleClassCheckBoxChecked = "checkBoxChecked"; public Label Label { get; } public TextureRect TextureRect { get; } /// /// Should the checkbox be to the left or the right of the label. /// public bool LeftAlign { get => _leftAlign; set { if (_leftAlign == value) return; _leftAlign = value; if (value) { Label.HorizontalExpand = false; TextureRect.SetPositionFirst(); Label.SetPositionInParent(1); } else { Label.HorizontalExpand = true; Label.SetPositionFirst(); TextureRect.SetPositionInParent(1); } } } private bool _leftAlign = true; public CheckBox() { ToggleMode = true; var hBox = new BoxContainer { Orientation = BoxContainer.LayoutOrientation.Horizontal, StyleClasses = { StyleClassCheckBox }, }; AddChild(hBox); TextureRect = new TextureRect { StyleClasses = { StyleClassCheckBox }, VerticalAlignment = VAlignment.Center, }; Label = new Label(); if (LeftAlign) { Label.HorizontalExpand = false; hBox.AddChild(TextureRect); hBox.AddChild(Label); } else { Label.HorizontalExpand = true; hBox.AddChild(Label); hBox.AddChild(TextureRect); } } protected override void DrawModeChanged() { base.DrawModeChanged(); if (TextureRect != null) { if (Pressed) TextureRect.AddStyleClass(StyleClassCheckBoxChecked); else TextureRect.RemoveStyleClass(StyleClassCheckBoxChecked); } } /// /// How to align the text inside the button. /// [ViewVariables] public AlignMode TextAlign { get => Label.Align; set => Label.Align = value; } /// /// If true, the button will allow shrinking and clip text /// to prevent the text from going outside the bounds of the button. /// If false, the minimum size will always fit the contained text. /// [ViewVariables] public bool ClipText { get => Label.ClipText; set => Label.ClipText = value; } /// /// The text displayed by the button. /// [ViewVariables] public string? Text { get => Label.Text; set => Label.Text = value; } } }