diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index 718731627..428f558aa 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -355,47 +355,45 @@ namespace PKHeX.WinForms.Controls } // General Use Functions // - - - private void SetDetailsOT(ITrainerInfo SAV) + private void SetDetailsOT(ITrainerInfo tr) { - if (string.IsNullOrWhiteSpace(SAV.OT)) + if (string.IsNullOrWhiteSpace(tr.OT)) return; // Get Save Information - TB_OT.Text = SAV.OT; - Label_OTGender.Text = gendersymbols[SAV.Gender & 1]; - Label_OTGender.ForeColor = Draw.GetGenderColor(SAV.Gender & 1); - TID_Trainer.LoadInfo(SAV); + TB_OT.Text = tr.OT; + Label_OTGender.Text = gendersymbols[tr.Gender & 1]; + Label_OTGender.ForeColor = Draw.GetGenderColor(tr.Gender & 1); + TID_Trainer.LoadInfo(tr); - if (SAV.Game >= 0) - CB_GameOrigin.SelectedValue = SAV.Game; + if (tr.Game >= 0) + CB_GameOrigin.SelectedValue = tr.Game; - var lang = SAV.Language; + var lang = tr.Language; if (lang <= 0) lang = (int)LanguageID.English; CB_Language.SelectedValue = lang; - if (SAV.ConsoleRegion != 0) + if (tr.ConsoleRegion != 0) { - CB_3DSReg.SelectedValue = SAV.ConsoleRegion; - CB_Country.SelectedValue = SAV.Country; - CB_SubRegion.SelectedValue = SAV.SubRegion; + CB_3DSReg.SelectedValue = tr.ConsoleRegion; + CB_Country.SelectedValue = tr.Country; + CB_SubRegion.SelectedValue = tr.SubRegion; } // Copy OT trash bytes for sensitive games (Gen1/2) - if (SAV is SAV1 s1 && pkm is PK1 p1) p1.OT_Trash = s1.OT_Trash; - else if (SAV is SAV2 s2 && pkm is PK2 p2) p2.OT_Trash = s2.OT_Trash; + if (tr is SAV1 s1 && pkm is PK1 p1) p1.OT_Trash = s1.OT_Trash; + else if (tr is SAV2 s2 && pkm is PK2 p2) p2.OT_Trash = s2.OT_Trash; UpdateNickname(null, EventArgs.Empty); } - private void SetDetailsHT(ITrainerInfo SAV) + private void SetDetailsHT(ITrainerInfo tr) { - if (string.IsNullOrWhiteSpace(SAV.OT)) + if (string.IsNullOrWhiteSpace(tr.OT)) return; if (TB_OTt2.Text.Length > 0) - Label_CTGender.Text = gendersymbols[SAV.Gender & 1]; + Label_CTGender.Text = gendersymbols[tr.Gender & 1]; } private void SetForms() @@ -1238,14 +1236,14 @@ namespace PKHeX.WinForms.Controls if (ModifierKeys != Keys.Control) return; - var SAV = RequestSaveFile; - if (SAV == null) // form did not provide the needed info + var sav = RequestSaveFile; + if (sav == null) // form did not provide the needed info return; if (tb == TB_Nickname) { pkm.Nickname = tb.Text; - var d = new TrashEditor(tb, pkm.Nickname_Trash, SAV); + var d = new TrashEditor(tb, pkm.Nickname_Trash, sav); d.ShowDialog(); tb.Text = d.FinalString; pkm.Nickname_Trash = d.FinalBytes; @@ -1253,7 +1251,7 @@ namespace PKHeX.WinForms.Controls else if (tb == TB_OT) { pkm.OT_Name = tb.Text; - var d = new TrashEditor(tb, pkm.OT_Trash, SAV); + var d = new TrashEditor(tb, pkm.OT_Trash, sav); d.ShowDialog(); tb.Text = d.FinalString; pkm.OT_Trash = d.FinalBytes; @@ -1261,7 +1259,7 @@ namespace PKHeX.WinForms.Controls else if (tb == TB_OTt2) { pkm.HT_Name = tb.Text; - var d = new TrashEditor(tb, pkm.HT_Trash, SAV); + var d = new TrashEditor(tb, pkm.HT_Trash, sav); d.ShowDialog(); tb.Text = d.FinalString; pkm.HT_Trash = d.FinalBytes; @@ -1304,9 +1302,9 @@ namespace PKHeX.WinForms.Controls // if egg wasn't originally obtained by OT => Link Trade, else => None bool isTraded = false; - var SAV = SaveFileRequested?.Invoke(this, e); - if (SAV != null) - isTraded = SAV.OT != TB_OT.Text || SAV.TID != pkm.TID || SAV.SID != pkm.SID; + var sav = SaveFileRequested?.Invoke(this, e); + if (sav != null) + isTraded = sav.OT != TB_OT.Text || sav.TID != pkm.TID || sav.SID != pkm.SID; CB_MetLocation.SelectedIndex = isTraded ? 2 : 0; if (!CHK_Nicknamed.Checked) @@ -1664,7 +1662,7 @@ namespace PKHeX.WinForms.Controls PopulateFilteredDataSources(sav); PopulateFields(pkm); - // SAV Specific Limits + // Save File Specific Limits TB_OT.MaxLength = pkm.OTLength; TB_OTt2.MaxLength = pkm.OTLength; TB_Nickname.MaxLength = pkm.NickLength; @@ -1758,7 +1756,7 @@ namespace PKHeX.WinForms.Controls tabMain.SelectedTab = Tab_Main; // first tab } - private void InitializeLanguage(SaveFile SAV) + private void InitializeLanguage(SaveFile sav) { // Set the various ComboBox DataSources up with their allowed entries SetCountrySubRegion(CB_Country, "countries"); @@ -1770,25 +1768,25 @@ namespace PKHeX.WinForms.Controls // Sub editors Stats.InitializeDataSources(); - PopulateFilteredDataSources(SAV); + PopulateFilteredDataSources(sav); } - private void PopulateFilteredDataSources(SaveFile SAV) + private void PopulateFilteredDataSources(SaveFile sav) { - GameInfo.Strings.SetItemDataSource(SAV.Version, SAV.Generation, SAV.MaxItemID, SAV.HeldItems, HaX); - if (SAV.Generation > 1) - CB_HeldItem.DataSource = new BindingSource(GameInfo.ItemDataSource.Where(i => i.Value <= SAV.MaxItemID).ToList(), null); + GameInfo.Strings.SetItemDataSource(sav.Version, sav.Generation, sav.MaxItemID, sav.HeldItems, HaX); + if (sav.Generation > 1) + CB_HeldItem.DataSource = new BindingSource(GameInfo.ItemDataSource.Where(i => i.Value <= sav.MaxItemID).ToList(), null); - CB_Language.DataSource = GameInfo.LanguageDataSource(SAV.Generation); + CB_Language.DataSource = GameInfo.LanguageDataSource(sav.Generation); - CB_Ball.DataSource = new BindingSource(GameInfo.BallDataSource.Where(b => b.Value <= SAV.MaxBallID).ToList(), null); - CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null); - DEV_Ability.DataSource = new BindingSource(GameInfo.AbilityDataSource.Where(a => a.Value <= SAV.MaxAbilityID).ToList(), null); - var gamelist = GameUtil.GetVersionsWithinRange(SAV, SAV.Generation).ToList(); + CB_Ball.DataSource = new BindingSource(GameInfo.BallDataSource.Where(b => b.Value <= sav.MaxBallID).ToList(), null); + CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= sav.MaxSpeciesID).ToList(), null); + DEV_Ability.DataSource = new BindingSource(GameInfo.AbilityDataSource.Where(a => a.Value <= sav.MaxAbilityID).ToList(), null); + var gamelist = GameUtil.GetVersionsWithinRange(sav, sav.Generation).ToList(); CB_GameOrigin.DataSource = new BindingSource(GameInfo.VersionDataSource.Where(g => gamelist.Contains((GameVersion)g.Value)).ToList(), null); // Set the Move ComboBoxes too.. - MoveDataAllowed = GameInfo.Strings.MoveDataSource = (HaX ? GameInfo.HaXMoveDataSource : GameInfo.LegalMoveDataSource).Where(m => m.Value <= SAV.MaxMoveID).ToList(); // Filter Z-Moves if appropriate + MoveDataAllowed = GameInfo.Strings.MoveDataSource = (HaX ? GameInfo.HaXMoveDataSource : GameInfo.LegalMoveDataSource).Where(m => m.Value <= sav.MaxMoveID).ToList(); // Filter Z-Moves if appropriate foreach (var cb in Moves.Concat(Relearn)) { cb.DataSource = new BindingSource(GameInfo.MoveDataSource, null); diff --git a/PKHeX.WinForms/Util/SpriteUtil.cs b/PKHeX.WinForms/Util/SpriteUtil.cs index f12f32fc8..730ec98fe 100644 --- a/PKHeX.WinForms/Util/SpriteUtil.cs +++ b/PKHeX.WinForms/Util/SpriteUtil.cs @@ -87,53 +87,53 @@ namespace PKHeX.WinForms return Resources.unknown; } - private static Image GetSprite(PKM pkm, bool isBoxBGRed = false) + private static Image GetSprite(PKM pk, bool isBoxBGRed = false) { - var img = GetSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format, isBoxBGRed); - if (pkm is IShadowPKM s && s.Purification > 0) + var img = GetSprite(pk.Species, pk.AltForm, pk.Gender, pk.SpriteItem, pk.IsEgg, pk.IsShiny, pk.Format, isBoxBGRed); + if (pk is IShadowPKM s && s.Purification > 0) { - if (pkm.Species == 249) // Lugia - img = Spriter.GetSprite(Resources._249x, 249, pkm.HeldItem, pkm.IsEgg, pkm.IsShiny, pkm.Format, isBoxBGRed); - GetSpriteGlow(pkm, new byte[] { 75, 0, 130 }, out var pixels, out var baseSprite, true); + if (pk.Species == 249) // Lugia + img = Spriter.GetSprite(Resources._249x, 249, pk.HeldItem, pk.IsEgg, pk.IsShiny, pk.Format, isBoxBGRed); + GetSpriteGlow(pk, new byte[] { 75, 0, 130 }, out var pixels, out var baseSprite, true); var glowImg = ImageUtil.GetBitmap(pixels, baseSprite.Width, baseSprite.Height, baseSprite.PixelFormat); img = ImageUtil.LayerImage(glowImg, img, 0, 0); } return img; } - private static Image GetSprite(SaveFile SAV) + private static Image GetSprite(SaveFile sav) { string file = "tr_00"; - if (SAV.Generation == 6 && (SAV.ORAS || SAV.ORASDEMO)) - file = $"tr_{SAV.MultiplayerSpriteID:00}"; + if (sav.Generation == 6 && (sav.ORAS || sav.ORASDEMO)) + file = $"tr_{sav.MultiplayerSpriteID:00}"; return Resources.ResourceManager.GetObject(file) as Image; } - private static Image GetWallpaper(SaveFile SAV, int box) + private static Image GetWallpaper(SaveFile sav, int box) { - string s = BoxWallpaper.GetWallpaperResourceName(SAV.Version, SAV.GetBoxWallpaper(box)); + string s = BoxWallpaper.GetWallpaperResourceName(sav.Version, sav.GetBoxWallpaper(box)); return (Bitmap)(Resources.ResourceManager.GetObject(s) ?? Resources.box_wp16xy); } - private static Image GetSprite(PKM pkm, SaveFile SAV, int box, int slot, bool flagIllegal = false) + private static Image GetSprite(PKM pk, SaveFile sav, int box, int slot, bool flagIllegal = false) { - if (!pkm.Valid) + if (!pk.Valid) return null; bool inBox = slot >= 0 && slot < 30; - var sprite = pkm.Species == 0 ? null : pkm.Sprite(isBoxBGRed: inBox && BoxWallpaper.IsWallpaperRed(SAV.Version, SAV.GetBoxWallpaper(box))); + var sprite = pk.Species == 0 ? null : pk.Sprite(isBoxBGRed: inBox && BoxWallpaper.IsWallpaperRed(sav.Version, sav.GetBoxWallpaper(box))); if (flagIllegal) { if (box >= 0) - pkm.Box = box; - var la = new LegalityAnalysis(pkm, SAV.Personal); - if (!la.Valid && pkm.Species != 0) + pk.Box = box; + var la = new LegalityAnalysis(pk, sav.Personal); + if (!la.Valid && pk.Species != 0) sprite = ImageUtil.LayerImage(sprite, Resources.warn, 0, 14); } if (inBox) // in box { - var flags = SAV.GetSlotFlags(box, slot); + var flags = sav.GetSlotFlags(box, slot); if (flags.HasFlagFast(StorageSlotFlag.Locked)) sprite = ImageUtil.LayerImage(sprite, Resources.locked, 26, 0); int team = flags.IsBattleTeam(); @@ -180,12 +180,12 @@ namespace PKHeX.WinForms } // Extension Methods - public static Image WallpaperImage(this SaveFile SAV, int box) => GetWallpaper(SAV, box); + public static Image WallpaperImage(this SaveFile sav, int box) => GetWallpaper(sav, box); public static Image Sprite(this MysteryGift gift) => GetSprite(gift); - public static Image Sprite(this SaveFile SAV) => GetSprite(SAV); - public static Image Sprite(this PKM pkm, bool isBoxBGRed = false) => GetSprite(pkm, isBoxBGRed); + public static Image Sprite(this SaveFile sav) => GetSprite(sav); + public static Image Sprite(this PKM pk, bool isBoxBGRed = false) => GetSprite(pk, isBoxBGRed); - public static Image Sprite(this PKM pkm, SaveFile SAV, int box, int slot, bool flagIllegal = false) - => GetSprite(pkm, SAV, box, slot, flagIllegal); + public static Image Sprite(this PKM pk, SaveFile sav, int box, int slot, bool flagIllegal = false) + => GetSprite(pk, sav, box, slot, flagIllegal); } } diff --git a/PKHeX.WinForms/Util/WinFormsUtil.cs b/PKHeX.WinForms/Util/WinFormsUtil.cs index 5b0d22016..352fdc65a 100644 --- a/PKHeX.WinForms/Util/WinFormsUtil.cs +++ b/PKHeX.WinForms/Util/WinFormsUtil.cs @@ -165,13 +165,13 @@ namespace PKHeX.WinForms /// /// Opens a dialog to open a , file, or any other supported file. /// - /// Misc extensions of files supported by the SAV. + /// Misc extensions of files supported by the Save File. /// Output result path /// Result of whether or not a file is to be loaded from the output path. - public static bool OpenSAVPKMDialog(IEnumerable Extensions, out string path) + public static bool OpenSAVPKMDialog(IEnumerable extensions, out string path) { - string supported = string.Join(";", Extensions.Select(s => $"*.{s}").Concat(new[] { "*.pkm" })); - OpenFileDialog ofd = new OpenFileDialog + string supported = string.Join(";", extensions.Select(s => $"*.{s}").Concat(new[] { "*.pkm" })); + var ofd = new OpenFileDialog { Filter = "All Files|*.*" + $"|Supported Files (*.*)|main;*.bin;{supported};*.bak" + ExtraSaveExtensions + @@ -248,41 +248,47 @@ namespace PKHeX.WinForms /// /// Opens a dialog to save a file. /// - /// to be saved. + /// to be saved. /// Box the player will be greeted with when accessing the PC ingame. /// Result of whether or not the file was saved. - public static bool SaveSAVDialog(SaveFile SAV, int CurrentBox = 0) + public static bool SaveSAVDialog(SaveFile sav, int CurrentBox = 0) { // Chunk Error Checking - string err = SAV.MiscSaveChecks(); + string err = sav.MiscSaveChecks(); if (err.Length > 0 && Prompt(MessageBoxButtons.YesNo, err, MsgSaveExportContinue) != DialogResult.Yes) return false; SaveFileDialog main = new SaveFileDialog { - Filter = SAV.Filter, - FileName = SAV.FileName, + Filter = sav.Filter, + FileName = sav.FileName, FilterIndex = 1000, // default to last, All Files RestoreDirectory = true }; - if (Directory.Exists(SAV.FileFolder)) - main.InitialDirectory = SAV.FileFolder; + if (Directory.Exists(sav.FileFolder)) + main.InitialDirectory = sav.FileFolder; // Export if (main.ShowDialog() != DialogResult.OK) return false; - if (SAV.HasBox) - SAV.CurrentBox = CurrentBox; + if (sav.HasBox) + sav.CurrentBox = CurrentBox; - var ext = Path.GetExtension(main.FileName)?.ToLower(); + ExportSAV(sav, main.FileName); + return true; + } + + private static void ExportSAV(SaveFile sav, string path) + { + var ext = Path.GetExtension(path)?.ToLower(); bool dsv = ext == ".dsv"; bool gci = ext == ".gci"; try { - File.WriteAllBytes(main.FileName, SAV.Write(dsv, gci)); - SAV.Edited = false; - Alert(MsgSaveExportSuccessPath, main.FileName); + File.WriteAllBytes(path, sav.Write(dsv, gci)); + sav.Edited = false; + Alert(MsgSaveExportSuccessPath, path); } catch (Exception x) { @@ -290,7 +296,6 @@ namespace PKHeX.WinForms Error(MsgFileWriteFail + Environment.NewLine + x.Message, MsgFileWriteProtectedAdvice); else throw; } - return true; } /// @@ -310,14 +315,7 @@ namespace PKHeX.WinForms return false; string path = output.FileName; - - if (File.Exists(path)) - { - // File already exists, save a .bak - string bakpath = $"{path}.bak"; - if (!File.Exists(bakpath)) - File.Move(path, bakpath); - } + SaveBackup(path); File.WriteAllBytes(path, gift.Data); return true;