#nullable enable using System; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Actions; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.Utility; namespace Content.Client.UserInterface { /// /// An individual action visible in the action menu. /// public class ActionMenuItem : ContainerButton { // shorter than default tooltip delay so user can // quickly explore what each action is private const float CustomTooltipDelay = 0.2f; public BaseActionPrototype Action { get; private set; } private Action _onControlFocusExited; public ActionMenuItem(BaseActionPrototype action, Action onControlFocusExited) { _onControlFocusExited = onControlFocusExited; Action = action; CustomMinimumSize = (64, 64); SizeFlagsVertical = SizeFlags.None; AddChild(new TextureRect { SizeFlagsHorizontal = SizeFlags.FillExpand, SizeFlagsVertical = SizeFlags.FillExpand, Stretch = TextureRect.StretchMode.Scale, Texture = action.Icon.Frame0() }); TooltipDelay = CustomTooltipDelay; TooltipSupplier = SupplyTooltip; } protected override void ControlFocusExited() { base.ControlFocusExited(); _onControlFocusExited.Invoke(this); } private Control SupplyTooltip(Control? sender) { return new ActionAlertTooltip(Action.Name, Action.Description, Action.Requires); } /// /// Change how this is displayed depending on if it is granted or revoked /// public void SetActionState(bool granted) { if (granted) { if (HasStyleClass(StyleNano.StyleClassActionMenuItemRevoked)) { RemoveStyleClass(StyleNano.StyleClassActionMenuItemRevoked); } } else { if (!HasStyleClass(StyleNano.StyleClassActionMenuItemRevoked)) { AddStyleClass(StyleNano.StyleClassActionMenuItemRevoked); } } } } }