PKHeX/PKHeX.WinForms/Controls/PKM Editor/StatusBrowser.cs
Kurt 7d77c3568d Localize status type browser on hover
Toxic isn't translated, so just use "Toxic".
2025-09-13 13:35:39 -05:00

116 lines
3.4 KiB
C#

using System;
using System.Windows.Forms;
using PKHeX.Core;
using PKHeX.Drawing.PokeSprite;
using PKHeX.WinForms.Controls;
namespace PKHeX.WinForms;
public partial class StatusBrowser : Form
{
public bool WasChosen { get; private set; }
public StatusCondition Choice { get; private set; }
private const int StatusCount = 7;
private int StatusHeight { get; }
private int StatusWidth => StatusHeight;
private int StatusBrowserWidth => StatusWidth * 2;
public StatusBrowser(int generation)
{
InitializeComponent();
StatusHeight = Drawing.PokeSprite.Properties.Resources.sicksleep.Height;
NUD_Sleep = new NumericUpDown
{
Minimum = 1,
Maximum = 7,
Value = 1,
Width = 40,
TextAlign = HorizontalAlignment.Center,
Margin = Padding.Empty,
Padding = Padding.Empty,
};
Add(GetImage(StatusCondition.None, "None"));
Add(GetImage(StatusCondition.Sleep1, "Sleep"), generation >= 5);
if (generation <= 4)
Add(NUD_Sleep);
Add(GetImage(StatusCondition.Poison, "Poison"));
Add(GetImage(StatusCondition.Burn, "Burn"));
Add(GetImage(StatusCondition.Paralysis, "Paralysis"));
Add(GetImage(StatusCondition.Freeze, "Freeze"));
if (generation is 3 or 4)
Add(GetImage(StatusCondition.PoisonBad, "Toxic"));
Height = StatusCount * StatusHeight;
Width = StatusBrowserWidth;
}
private readonly NumericUpDown NUD_Sleep;
private void Add(Control c, bool flowBreak = true)
{
flp.Controls.Add(c);
if (flowBreak)
flp.SetFlowBreak(c, true);
}
public void LoadList(PKM pk)
{
StatusType type;
if (pk.Format <= 4)
{
var condition = (StatusCondition)pk.Status_Condition;
NUD_Sleep.Value = Math.Max(1, (int)condition & 7);
type = condition.GetStatusType();
}
else
{
type = (StatusType)(pk.Status_Condition & 7);
}
Text = WinFormsTranslator.TranslateEnum(type, Main.CurrentLanguage);
}
private SelectablePictureBox GetImage(StatusCondition value, string name)
{
var img = value == 0
? Drawing.PokeSprite.Properties.Resources.sickfaint
: value.GetStatusSprite();
var pb = new SelectablePictureBox
{
Image = img,
Name = name,
AccessibleDescription = name,
AccessibleName = name,
AccessibleRole = AccessibleRole.Graphic,
Margin = Padding.Empty,
Padding = Padding.Empty,
Width = StatusWidth,
Height = StatusHeight,
};
pb.MouseEnter += (_, _) => Text = value is StatusCondition.PoisonBad ? "Toxic" : WinFormsTranslator.TranslateEnum(value.GetStatusType(), Main.CurrentLanguage);
pb.Click += (_, _) =>
{
if (value is StatusCondition.Sleep1)
value = (StatusCondition)NUD_Sleep.Value;
SelectValue(value);
};
pb.KeyDown += (_, e) =>
{
if (e.KeyCode == Keys.Enter)
SelectValue(value);
};
return pb;
}
private void SelectValue(StatusCondition value)
{
Choice = value;
WasChosen = true;
Close();
}
}