PKHeX/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Link6.cs
Kurt 2c541ad422
Update to .NET 10 (#4676)
* Update to .NET 10
* Property fields
* API signature updates
* Extension method blocks

* Completed dark mode support
  Outside of my control:
- vertical tab control (pkm editor)
- datetimepicker controls
- lgpe event flags (no idea)
- some control types having white-borders when they should really be gray

Box background is 50% transparency to effectively darken the image.

* Custom legality report popup
* Event diff dialog, version select dialog
* Add quick overwrite popup for export sav
* Extension methods
* Dark Mode: glow currently editing sprite
* Add invalid encounter hint for trade evolutions
* Extension properties
* Append legality hint on hover card
* Slot image loading: clear the screen-reader description if a slot is empty/invalid, rather than retain the previous description. Changing boxes would easily confuse users on this.
2025-12-31 01:42:05 -06:00

140 lines
4.3 KiB
C#

using System;
using System.IO;
using System.Windows.Forms;
using PKHeX.Core;
namespace PKHeX.WinForms;
public partial class SAV_Link6 : Form
{
private readonly SaveFile Origin;
private readonly ISaveBlock6Main SAV;
private readonly PL6 Gifts;
public SAV_Link6(SaveFile sav)
{
InitializeComponent();
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
SAV = (ISaveBlock6Main)(Origin = sav).Clone();
var filtered = GameInfo.FilteredSources;
foreach (var cb in (ComboBox[])[CB_Item1, CB_Item2, CB_Item3, CB_Item4, CB_Item5, CB_Item6])
{
cb.InitializeBinding();
cb.DataSource = new BindingSource(filtered.Items, string.Empty);
}
Gifts = SAV.Link.Gifts;
LoadLinkData();
}
private void B_Save_Click(object sender, EventArgs e)
{
SaveLinkData();
SAV.Link.RefreshChecksum();
Origin.CopyChangesFrom((SaveFile)SAV);
Close();
}
private void B_Cancel_Click(object sender, EventArgs e)
{
Close();
}
private void B_Import_Click(object sender, EventArgs e)
{
using var ofd = new OpenFileDialog();
ofd.Filter = PL6.Filter;
if (ofd.ShowDialog() != DialogResult.OK)
return;
if (new FileInfo(ofd.FileName).Length != PL6.Size)
{ WinFormsUtil.Alert("Invalid file length"); return; }
byte[] data = File.ReadAllBytes(ofd.FileName);
data.CopyTo(Gifts.Data);
LoadLinkData();
}
private void B_Export_Click(object sender, EventArgs e)
{
using var sfd = new SaveFileDialog();
sfd.Filter = PL6.Filter;
if (sfd.ShowDialog() != DialogResult.OK)
return;
File.WriteAllBytes(sfd.FileName, Gifts.Data);
WinFormsUtil.Alert("Pokémon Link data saved to:" + Environment.NewLine + sfd.FileName);
}
private void LoadLinkData()
{
RTB_LinkSource.Text = Gifts.Origin;
NUD_BP.Value = Gifts.BattlePoints;
NUD_Pokemiles.Value = Gifts.Pokemiles;
CB_Item1.SelectedValue = (int)Gifts.Item1;
CB_Item2.SelectedValue = (int)Gifts.Item2;
CB_Item3.SelectedValue = (int)Gifts.Item3;
CB_Item4.SelectedValue = (int)Gifts.Item4;
CB_Item5.SelectedValue = (int)Gifts.Item5;
CB_Item6.SelectedValue = (int)Gifts.Item6;
NUD_Item1.Value = Gifts.Quantity1;
NUD_Item2.Value = Gifts.Quantity2;
NUD_Item3.Value = Gifts.Quantity3;
NUD_Item4.Value = Gifts.Quantity4;
NUD_Item5.Value = Gifts.Quantity5;
NUD_Item6.Value = Gifts.Quantity6;
// Pokemon slots
TB_PKM1.Text = GetSpecies(Gifts.Entity1.Species);
TB_PKM2.Text = GetSpecies(Gifts.Entity2.Species);
TB_PKM3.Text = GetSpecies(Gifts.Entity3.Species);
TB_PKM4.Text = GetSpecies(Gifts.Entity4.Species);
TB_PKM5.Text = GetSpecies(Gifts.Entity5.Species);
TB_PKM6.Text = GetSpecies(Gifts.Entity6.Species);
if (Gifts.Enabled)
{
NUD_BP.Enabled = true;
NUD_Pokemiles.Enabled = true;
B_Export.Enabled = true;
}
CHK_LinkAvailable.Checked = Gifts.Enabled;
}
private static string GetSpecies(ushort species)
{
var arr = GameInfo.Strings.Species;
if (species < arr.Count)
return arr[species];
return species.ToString();
}
private void SaveLinkData()
{
Gifts.Origin = RTB_LinkSource.Text;
Gifts.Enabled = CHK_LinkAvailable.Checked;
Gifts.BattlePoints = (ushort)NUD_BP.Value;
Gifts.Pokemiles = (ushort)NUD_Pokemiles.Value;
Gifts.Item1 = (ushort)WinFormsUtil.GetIndex(CB_Item1);
Gifts.Item2 = (ushort)WinFormsUtil.GetIndex(CB_Item2);
Gifts.Item3 = (ushort)WinFormsUtil.GetIndex(CB_Item3);
Gifts.Item4 = (ushort)WinFormsUtil.GetIndex(CB_Item4);
Gifts.Item5 = (ushort)WinFormsUtil.GetIndex(CB_Item5);
Gifts.Item6 = (ushort)WinFormsUtil.GetIndex(CB_Item6);
Gifts.Quantity1 = (byte)NUD_Item1.Value;
Gifts.Quantity2 = (byte)NUD_Item2.Value;
Gifts.Quantity3 = (byte)NUD_Item3.Value;
Gifts.Quantity4 = (byte)NUD_Item4.Value;
Gifts.Quantity5 = (byte)NUD_Item5.Value;
Gifts.Quantity6 = (byte)NUD_Item6.Value;
}
}