mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-04-28 03:27:14 -05:00
116 lines
3.4 KiB
C#
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();
|
|
}
|
|
}
|