diff --git a/PKHeX.Core/Saves/Substructures/Gen9/ZA/FashionItem9a.cs b/PKHeX.Core/Saves/Substructures/Gen9/ZA/FashionItem9a.cs index 6fc1b3048..9f1ada281 100644 --- a/PKHeX.Core/Saves/Substructures/Gen9/ZA/FashionItem9a.cs +++ b/PKHeX.Core/Saves/Substructures/Gen9/ZA/FashionItem9a.cs @@ -58,4 +58,17 @@ public static void SetArray(ReadOnlySpan items, Span data) for (int i = 0; i < items.Length; i++) items[i].Write(data.Slice(i * SIZE, SIZE)); } + + public static void ModifyAll(Span data, Action action) + { + int count = data.Length / SIZE; + for (int i = 0; i < count; i++) + { + var slice = data.Slice(i * SIZE, SIZE); + var item = Read(slice); + if (item.Value is not None) + action(item); + item.Write(slice); + } + } } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Fashion9a.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Fashion9a.cs index cd2fc4262..fa5c73bc3 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Fashion9a.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Fashion9a.cs @@ -9,10 +9,14 @@ namespace PKHeX.WinForms; public sealed partial class SAV_Fashion9a : Form { private readonly IFashionBlockEditor[] _grids; + private readonly SAV9ZA SAV; + private readonly SAV9ZA Origin; public SAV_Fashion9a(SAV9ZA sav) { InitializeComponent(); + + SAV = (SAV9ZA)(Origin = sav).Clone(); WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage); // Allow drag/drop on form and main tab control @@ -25,7 +29,7 @@ public SAV_Fashion9a(SAV9ZA sav) TC_Features.Multiline = true; // Create grids for each block - var accessor = sav.Blocks; + var accessor = SAV.Blocks; _grids = [ Create(accessor.GetBlock(KFashionTops), nameof(KFashionTops)), @@ -151,6 +155,7 @@ private void B_Save_Click(object sender, EventArgs e) { foreach (var grid in _grids) grid.Save(); + Origin.CopyChangesFrom(SAV); Close(); } @@ -328,14 +333,12 @@ public void Save() public void SetAllOwned(bool state) { - for (int i = 0; i < Grid.RowCount; i++) - { - var cells = Grid.Rows[i].Cells; - var value = cells[ColValue].Value?.ToString(); - if (value == (FashionItem9a.None.ToString())) - continue; - cells[ColIsOwned].Value = state; - } + Grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; + Save(); + FashionItem9a.ModifyAll(Block.Data, z => z.IsOwned = state); + Load(); + Grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; + System.Media.SystemSounds.Asterisk.Play(); } private void LoadItem(int index, FashionItem9a item)