PKHeX/PKHeX.WinForms/Subforms/Save Editors/SAV_SimplePokedex.cs
Kurt 94f3937f2f Refactor: extract gen3 save block structures
Changed: Inventory editor no longer needs to clone the save file on GUI open
Changed: some method signatures have moved from SAV3* to the specific block
Allows the block structures to be used without a SAV3 object
Allows the Inventory editor to open from a blank save file.
2026-03-14 13:40:17 -05:00

106 lines
2.9 KiB
C#

using System;
using System.Windows.Forms;
using PKHeX.Core;
namespace PKHeX.WinForms;
public partial class SAV_SimplePokedex : Form
{
private readonly SaveFile SAV;
private readonly int MaxSpeciesID;
public SAV_SimplePokedex(SaveFile sav)
{
InitializeComponent();
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
SAV = sav;
var count = MaxSpeciesID = SAV.MaxSpeciesID;
var speciesNames = GameInfo.Strings.specieslist.AsSpan(1, count);
AddAllSpecies(speciesNames);
LoadAllFlags(SAV, count);
}
private void AddAllSpecies(ReadOnlySpan<string> speciesNames)
{
for (var i = 0; i < speciesNames.Length; i++)
{
var text = $"{i+1:000} - {speciesNames[i]}";
CLB_Seen.Items.Add(text);
CLB_Caught.Items.Add(text);
}
}
private void LoadAllFlags(SaveFile sav, int count)
{
for (int i = 0; i < count; i++)
{
ushort species = (ushort)(i + 1);
CLB_Seen.SetItemChecked(i, sav.GetSeen(species));
CLB_Caught.SetItemChecked(i, sav.GetCaught(species));
}
}
private void SaveAllFlags(SaveFile sav, int count)
{
for (int i = 0; i < count; i++)
{
ushort species = (ushort)(i + 1);
sav.SetSeen(species, CLB_Seen.GetItemChecked(i));
sav.SetCaught(species, CLB_Caught.GetItemChecked(i));
}
}
private void B_Save_Click(object sender, EventArgs e)
{
SaveAllFlags(SAV, MaxSpeciesID);
SanityCheck();
SAV.State.Edited = true;
Close();
}
private void SanityCheck()
{
// Remove any foreign species dex bits.
if (SAV is SAV3FRLG { IsVirtualConsole: true })
{
for (int i = 150; i < MaxSpeciesID; i++)
{
ushort species = (ushort)(i + 1);
if (!Legal.IsForeignFRLG(species))
continue;
//SAV.SetSeen(species, false); // some can be seen via trainers; don't bother
SAV.SetCaught(species, false);
}
}
if (SAV is SAV3 s3)
s3.MirrorSeenFlags();
}
private void B_Cancel_Click(object sender, EventArgs e) => Close();
private void B_SeenAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Seen.SetItemChecked(i, true);
}
private void B_SeenNone_Click(object sender, EventArgs e)
{
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Seen.SetItemChecked(i, false);
}
private void B_CaughtAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Caught.SetItemChecked(i, true);
}
private void B_CaughtNone_Click(object sender, EventArgs e)
{
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Caught.SetItemChecked(i, false);
}
}