using Content.Shared.CartridgeLoader; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; namespace Content.Client.PDA; [GenerateTypedNameReferences] public sealed partial class PdaProgramItem : ContainerButton { public const string StylePropertyBgColor = "backgroundColor"; public const string NormalBgColor = "#313138"; public const string HoverColor = "#3E6C45"; private Entity _cartridge; public event Action? OnProgramItemPressed; public event Action? OnUninstallButtonPressed; public event Action? OnInstallButtonPressed; private readonly StyleBoxFlat _styleBox = new() { BackgroundColor = Color.FromHex("#25252a"), }; public Color BackgroundColor { get => _styleBox.BackgroundColor; set => _styleBox.BackgroundColor = value; } public PdaProgramItem(Entity program) { RobustXamlLoader.Load(this); SetCartridge(program); Panel.PanelOverride = _styleBox; OnPressed += OnSelfPressed; InstallButton.OnPressed += OnInstallPressed; } private void OnSelfPressed(ButtonEventArgs args) { OnProgramItemPressed?.Invoke(_cartridge); } private void OnInstallPressed(ButtonEventArgs args) { switch (_cartridge.Comp.InstallationStatus) { case InstallationStatus.Cartridge: OnInstallButtonPressed?.Invoke(_cartridge.Owner); break; case InstallationStatus.Installed: OnUninstallButtonPressed?.Invoke(_cartridge.Owner); break; case InstallationStatus.Readonly: default: break; } } protected override void Draw(DrawingHandleScreen handle) { base.Draw(handle); if (TryGetStyleProperty(StylePropertyBgColor, out var bgColor)) BackgroundColor = bgColor; } public void SetCartridge(Entity program) { if (program.Comp.Icon is { } icon) Icon.SetFromSpriteSpecifier(icon); _cartridge = program; ProgramName.Text = Loc.GetString(program.Comp.ProgramName); switch (program.Comp.InstallationStatus) { case InstallationStatus.Cartridge: InstallButton.Visible = true; InstallButton.Text = Loc.GetString("cartridge-bound-user-interface-install-button"); break; case InstallationStatus.Installed: InstallButton.Visible = true; InstallButton.Text = Loc.GetString("cartridge-bound-user-interface-uninstall-button"); break; case InstallationStatus.Readonly: InstallButton.Visible = false; break; } } }