From b4222c756a278d3ddcb568cca5c7283045a47971 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sun, 18 Jun 2017 22:27:40 -0700 Subject: [PATCH] Refactoring reduce cross-class chatter, simplifly large methods to smaller pieces some speed improvements --- PKHeX.Core/Game/GameInfo.cs | 2 +- PKHeX.Core/Legality/Core.cs | 44 ++-- PKHeX.Core/PKM/PKMConverter.cs | 12 +- PKHeX.Core/PKM/ShowdownSet.cs | 2 +- PKHeX.Core/Saves/SaveFile.cs | 4 +- .../Controls/PKM Editor/PKMEditor.cs | 196 ++++++++-------- .../Controls/SAV Editor/BoxEditor.cs | 8 +- .../Controls/SAV Editor/ContextMenuSAV.cs | 2 +- .../Controls/SAV Editor/SAVEditor.cs | 213 ++++++++++-------- PKHeX.WinForms/MainWindow/Main.cs | 84 ++++--- 10 files changed, 309 insertions(+), 258 deletions(-) diff --git a/PKHeX.Core/Game/GameInfo.cs b/PKHeX.Core/Game/GameInfo.cs index 60858651d..2c372a79f 100644 --- a/PKHeX.Core/Game/GameInfo.cs +++ b/PKHeX.Core/Game/GameInfo.cs @@ -273,7 +273,7 @@ namespace PKHeX.Core } } } - public static GameStrings Strings; + public static GameStrings Strings { get; set; } // DataSource providing public static List ItemDataSource { get; private set; } diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 71e089073..76d7c1c74 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -8,27 +8,43 @@ namespace PKHeX.Core { public static partial class Legal { - /// Event Database for a given Generation - public static MysteryGift[] MGDB_G3, MGDB_G4, MGDB_G5, MGDB_G6, MGDB_G7 = new MysteryGift[0]; + /// Event Database for Generation 3 + public static MysteryGift[] MGDB_G3 { get; private set; } = new MysteryGift[0]; + + /// Event Database for Generation 4 + public static MysteryGift[] MGDB_G4 { get; private set; } = new MysteryGift[0]; + + /// Event Database for Generation 5 + public static MysteryGift[] MGDB_G5 { get; private set; } = new MysteryGift[0]; + + /// Event Database for Generation 6 + public static MysteryGift[] MGDB_G6 { get; private set; } = new MysteryGift[0]; + + /// Event Database for Generation 7 + public static MysteryGift[] MGDB_G7 { get; private set; } = new MysteryGift[0]; /// Setting to specify if an analysis should permit data sourced from the physical cartridge era of GameBoy games. - public static bool AllowGBCartEra = false; - public static bool AllowGen1Tradeback = false; + public static bool AllowGBCartEra { get; set; } + public static bool AllowGen1Tradeback { get; set; } public static bool AllowGen2VCTransfer => AllowGen1Tradeback; - public static bool AllowGen2VCCrystal = false; + public static bool AllowGen2VCCrystal => false; public static bool AllowGen2Crystal => AllowGBCartEra || AllowGen2VCCrystal; public static bool AllowGen2MoveReminder => AllowGBCartEra; - /// Setting to specify if the e-berry index item is an eningma berry or a e-reader berry and the name of the e-reader berry - public static bool EReaderBerryIsEnigma = true; - public static string EReaderBerryName = string.Empty; + /// e-Reader Berry originates from a Japanese SaveFile + public static bool SavegameJapanese { get; set; } + /// e-Reader Berry is Enigma or special berry + public static bool EReaderBerryIsEnigma { get; set; } = true; + /// e-Reader Berry Name + public static string EReaderBerryName { get; set; } = string.Empty; + /// e-Reader Berry Name formatted in Title Case public static string EReaderBerryDisplayName => string.Format(V372, Util.ToTitleCase(EReaderBerryName.ToLower())); - public static bool SavegameJapanese = false; - public static string Savegame_OT = string.Empty; - public static int Savegame_TID = 0; - public static int Savegame_SID = 0; - public static int Savegame_Gender = 0; - public static GameVersion Savegame_Version = GameVersion.Any; + + public static string Savegame_OT { private get; set; } = string.Empty; + public static int Savegame_TID { private get; set; } + public static int Savegame_SID { private get; set; } + public static int Savegame_Gender { private get; set; } + public static GameVersion Savegame_Version { private get; set; } = GameVersion.Any; // Gen 1 private static readonly Learnset[] LevelUpRB = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_rb.pkl"), MaxSpeciesID_1); diff --git a/PKHeX.Core/PKM/PKMConverter.cs b/PKHeX.Core/PKM/PKMConverter.cs index 200dd65b8..87cbb9fe9 100644 --- a/PKHeX.Core/PKM/PKMConverter.cs +++ b/PKHeX.Core/PKM/PKMConverter.cs @@ -6,12 +6,12 @@ namespace PKHeX.Core { public static class PKMConverter { - public static int Country = 49; - public static int Region = 7; - public static int ConsoleRegion = 1; - public static string OT_Name = "PKHeX"; - public static int OT_Gender; // Male - public static int Language = 1; // en + public static int Country { get; private set; } = 49; + public static int Region { get; private set; } = 7; + public static int ConsoleRegion { get; private set; } = 1; + public static string OT_Name { get; private set; } = "PKHeX"; + public static int OT_Gender { get; private set; } // Male + public static int Language { get; private set; } = 1; // en public static void UpdateConfig(int SUBREGION, int COUNTRY, int _3DSREGION, string TRAINERNAME, int TRAINERGENDER, int LANGUAGE) { diff --git a/PKHeX.Core/PKM/ShowdownSet.cs b/PKHeX.Core/PKM/ShowdownSet.cs index 1258d68c9..5f0b16f45 100644 --- a/PKHeX.Core/PKM/ShowdownSet.cs +++ b/PKHeX.Core/PKM/ShowdownSet.cs @@ -296,7 +296,7 @@ namespace PKHeX.Core else if (Set.Species == 676) Set.Form = ""; // Furfrou else if (Set.Species == 666 && Set.Form == "Poké Ball") Set.Form = "Pokeball"; // Vivillon - return Set.GetText(); + return Set.Text; } private void ParseFirstLine(string line) { diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs index 99df95011..b4a2239cb 100644 --- a/PKHeX.Core/Saves/SaveFile.cs +++ b/PKHeX.Core/Saves/SaveFile.cs @@ -6,8 +6,8 @@ namespace PKHeX.Core // Base Class for Save Files public abstract class SaveFile { - public static bool SetUpdateDex = true; - public static bool SetUpdatePKM = true; + public static bool SetUpdateDex { protected get; set; } = true; + public static bool SetUpdatePKM { protected get; set; } = true; // General Object Properties public byte[] Data; diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index 7727f6aad..7fd7a0c98 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -32,22 +32,22 @@ namespace PKHeX.WinForms.Controls c.KeyDown += WinFormsUtil.RemoveDropCB; } - public PKM pkm; - public bool HaX; - public bool fieldsInitialized; - public bool fieldsLoaded; - public bool Unicode; - public bool? IsLegal; - public byte[] lastData; - public bool ModifyPKM = true; - public GameVersion origintrack; + public PKM CurrentPKM { get => fieldsInitialized ? PreparePKM() : pkm; set => pkm = value; } + public bool ModifyPKM { private get; set; } = true; + public bool Unicode { private get; set; } = true; + public bool HaX { private get; set; } + public byte[] LastData { private get; set; } + private PKM pkm; + private bool fieldsInitialized; + private bool fieldsLoaded; private bool changingFields; + private GameVersion origintrack; private Action GetFieldsfromPKM; private Func GetPKMfromFields; private LegalityAnalysis Legality; private string[] gendersymbols = { "♂", "♀", "-" }; - private static readonly Image mixedHighlight = ImageUtil.ChangeOpacity(Resources.slotSet, 0.5); + private readonly Image mixedHighlight = ImageUtil.ChangeOpacity(Resources.slotSet, 0.5); public event EventHandler LegalityChanged; public event EventHandler UpdatePreviewSprite; @@ -59,7 +59,7 @@ namespace PKHeX.WinForms.Controls private readonly PictureBox[] movePB, relearnPB; private readonly ToolTip Tip1 = new ToolTip(), Tip2 = new ToolTip(), Tip3 = new ToolTip(), NatureTip = new ToolTip(), EVTip = new ToolTip(); private SaveFile RequestSaveFile => SaveFileRequested?.Invoke(this, EventArgs.Empty); - public bool PKMIsUnsaved => fieldsInitialized && fieldsLoaded && lastData != null && lastData.Any(b => b != 0) && !lastData.SequenceEqual(PreparePKM().Data); + public bool PKMIsUnsaved => fieldsInitialized && fieldsLoaded && LastData != null && LastData.Any(b => b != 0) && !LastData.SequenceEqual(PreparePKM().Data); public bool IsEmptyOrEgg => CHK_IsEgg.Checked || CB_Species.SelectedIndex == 0; public PKM PreparePKM(bool click = true) @@ -98,10 +98,6 @@ namespace PKHeX.WinForms.Controls return false; } - public void UpdateStringDisplay() - { - UpdateIVs(null, null); // Prompt an update for the characteristics - } public void InitializeFields() { // Now that the ComboBoxes are ready, load the data. @@ -231,9 +227,8 @@ namespace PKHeX.WinForms.Controls SetMarkings(); UpdateLegality(); - lastData = PreparePKM()?.Data; - // Refresh the Preview Box - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); + LastData = PreparePKM()?.Data; } public void UpdateLegality(LegalityAnalysis la = null, bool skipMoveRepop = false) { @@ -245,12 +240,9 @@ namespace PKHeX.WinForms.Controls { PB_WarnMove1.Visible = PB_WarnMove2.Visible = PB_WarnMove3.Visible = PB_WarnMove4.Visible = PB_WarnRelearn1.Visible = PB_WarnRelearn2.Visible = PB_WarnRelearn3.Visible = PB_WarnRelearn4.Visible = false; - IsLegal = null; return; } - IsLegal = Legality.Valid; - // Refresh Move Legality for (int i = 0; i < 4; i++) movePB[i].Visible = !Legality.info?.Moves[i].Valid ?? false; @@ -276,7 +268,7 @@ namespace PKHeX.WinForms.Controls c.SelectionLength = 0; // flicker hack } fieldsLoaded |= tmp; - LegalityChanged?.Invoke(this, null); + LegalityChanged?.Invoke(Legality.Valid, null); } public void UpdateUnicode(string[] symbols) { @@ -299,6 +291,11 @@ namespace PKHeX.WinForms.Controls if (PKX.GetGender(Label_CTGender.Text) < 2) Label_CTGender.Text = gendersymbols[PKX.GetGender(Label_CTGender.Text)]; } + private void UpdateSprite() + { + if (fieldsLoaded && fieldsInitialized) + UpdatePreviewSprite?.Invoke(this, null); + } // General Use Functions // private Color GetGenderColor(int gender) @@ -827,8 +824,7 @@ namespace PKHeX.WinForms.Controls CB_Form.SelectedIndex = pkm.AltForm; } SetIsShiny(null); - if (fieldsLoaded) - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); } CB_HPType.SelectedValue = pkm.HPType; @@ -1001,7 +997,7 @@ namespace PKHeX.WinForms.Controls TB_PID.Text = pkm.PID.ToString("X8"); SetIsShiny(null); - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); if (pkm.GenNumber < 6 && pkm.Format >= 6) TB_EC.Text = TB_PID.Text; } @@ -1094,8 +1090,7 @@ namespace PKHeX.WinForms.Controls MT_Form.Text = CB_Form.SelectedIndex.ToString(); changingFields = false; - if (fieldsLoaded) - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); } private void UpdateHaXForm(object sender, EventArgs e) { @@ -1106,8 +1101,7 @@ namespace PKHeX.WinForms.Controls CB_Form.SelectedIndex = CB_Form.Items.Count > form ? form : -1; changingFields = false; - if (fieldsLoaded) - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); } private void UpdatePP(object sender, EventArgs e) { @@ -1481,7 +1475,7 @@ namespace PKHeX.WinForms.Controls } UpdateNickname(null, null); - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); } private void UpdateMetAsEgg(object sender, EventArgs e) { @@ -1584,7 +1578,7 @@ namespace PKHeX.WinForms.Controls if (Util.ToUInt32(TB_SID.Text) > ushort.MaxValue) TB_SID.Text = "65535"; SetIsShiny(sender); - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); UpdateIVs(null, null); // If the EC is changed, EC%6 (Characteristic) might be changed. TB_PID.Select(60, 0); // position cursor at end of field if (pkm.Format <= 4 && fieldsLoaded) @@ -1640,9 +1634,7 @@ namespace PKHeX.WinForms.Controls return; ValidateComboBox(sender); - - if (fieldsLoaded) - UpdatePreviewSprite?.Invoke(this, null); + UpdateSprite(); } private void ValidateComboBox2(object sender, EventArgs e) { @@ -1735,79 +1727,86 @@ namespace PKHeX.WinForms.Controls /// /// Refreshes the interface for the current PKM format. /// - public void ToggleInterface() + public bool ToggleInterface(SaveFile sav, PKM pk) { Tip1.RemoveAll(); Tip2.RemoveAll(); Tip3.RemoveAll(); // TSV/PSV - FLP_Country.Visible = FLP_SubRegion.Visible = FLP_3DSRegion.Visible = pkm.Format >= 6; - Label_EncryptionConstant.Visible = BTN_RerollEC.Visible = TB_EC.Visible = pkm.Format >= 6; - GB_nOT.Visible = GB_RelearnMoves.Visible = BTN_Medals.Visible = BTN_History.Visible = pkm.Format >= 6; + FLP_Country.Visible = FLP_SubRegion.Visible = FLP_3DSRegion.Visible = pk.Format >= 6; + Label_EncryptionConstant.Visible = BTN_RerollEC.Visible = TB_EC.Visible = pk.Format >= 6; + GB_nOT.Visible = GB_RelearnMoves.Visible = BTN_Medals.Visible = BTN_History.Visible = pk.Format >= 6; - PB_MarkPentagon.Visible = pkm.Format >= 6; - PB_MarkAlola.Visible = PB_MarkVC.Visible = PB_MarkHorohoro.Visible = pkm.Format >= 7; + PB_MarkPentagon.Visible = pk.Format >= 6; + PB_MarkAlola.Visible = PB_MarkVC.Visible = PB_MarkHorohoro.Visible = pk.Format >= 7; - FLP_NSparkle.Visible = L_NSparkle.Visible = CHK_NSparkle.Visible = pkm.Format == 5; + FLP_NSparkle.Visible = L_NSparkle.Visible = CHK_NSparkle.Visible = pk.Format == 5; - CB_Form.Visible = Label_Form.Visible = CHK_AsEgg.Visible = GB_EggConditions.Visible = PB_Mark5.Visible = PB_Mark6.Visible = pkm.Format >= 4; - FLP_ShinyLeaf.Visible = L_ShinyLeaf.Visible = ShinyLeaf.Visible = pkm.Format == 4; + CB_Form.Visible = Label_Form.Visible = CHK_AsEgg.Visible = GB_EggConditions.Visible = PB_Mark5.Visible = PB_Mark6.Visible = pk.Format >= 4; + FLP_ShinyLeaf.Visible = L_ShinyLeaf.Visible = ShinyLeaf.Visible = pk.Format == 4; - DEV_Ability.Enabled = DEV_Ability.Visible = pkm.Format > 3 && HaX; - CB_Ability.Visible = !DEV_Ability.Enabled && pkm.Format >= 3; - FLP_Nature.Visible = pkm.Format >= 3; - FLP_Ability.Visible = pkm.Format >= 3; - FLP_Language.Visible = pkm.Format >= 3; - GB_ExtraBytes.Visible = GB_ExtraBytes.Enabled = pkm.Format >= 3; - GB_Markings.Visible = pkm.Format >= 3; - BTN_Ribbons.Visible = pkm.Format >= 3; - CB_HPType.Enabled = CB_Form.Enabled = pkm.Format >= 3; - BTN_RerollPID.Visible = Label_PID.Visible = TB_PID.Visible = Label_SID.Visible = TB_SID.Visible = pkm.Format >= 3; + DEV_Ability.Enabled = DEV_Ability.Visible = pk.Format > 3 && HaX; + CB_Ability.Visible = !DEV_Ability.Enabled && pk.Format >= 3; + FLP_Nature.Visible = pk.Format >= 3; + FLP_Ability.Visible = pk.Format >= 3; + FLP_Language.Visible = pk.Format >= 3; + GB_ExtraBytes.Visible = GB_ExtraBytes.Enabled = pk.Format >= 3; + GB_Markings.Visible = pk.Format >= 3; + BTN_Ribbons.Visible = pk.Format >= 3; + CB_HPType.Enabled = CB_Form.Enabled = pk.Format >= 3; + BTN_RerollPID.Visible = Label_PID.Visible = TB_PID.Visible = Label_SID.Visible = TB_SID.Visible = pk.Format >= 3; - FLP_FriendshipForm.Visible = pkm.Format >= 2; - FLP_HeldItem.Visible = pkm.Format >= 2; - CHK_IsEgg.Visible = Label_Gender.Visible = pkm.Format >= 2; - FLP_PKRS.Visible = FLP_EggPKRSRight.Visible = pkm.Format >= 2; - Label_OTGender.Visible = pkm.Format >= 2; + FLP_FriendshipForm.Visible = pk.Format >= 2; + FLP_HeldItem.Visible = pk.Format >= 2; + CHK_IsEgg.Visible = Label_Gender.Visible = pk.Format >= 2; + FLP_PKRS.Visible = FLP_EggPKRSRight.Visible = pk.Format >= 2; + Label_OTGender.Visible = pk.Format >= 2; - FLP_Purification.Visible = FLP_ShadowID.Visible = pkm is XK3 || pkm is CK3; + FLP_Purification.Visible = FLP_ShadowID.Visible = pk is XK3 || pk is CK3; NUD_ShadowID.Maximum = 127; // HaX override, needs to be after DEV_Ability enabled assignment. - TB_AbilityNumber.Visible = pkm.Format >= 6 && DEV_Ability.Enabled; + TB_AbilityNumber.Visible = pk.Format >= 6 && DEV_Ability.Enabled; // Met Tab - FLP_MetDate.Visible = pkm.Format >= 4; - FLP_Fateful.Visible = FLP_Ball.Visible = FLP_OriginGame.Visible = pkm.Format >= 3; - FLP_MetLocation.Visible = FLP_MetLevel.Visible = pkm.Format >= 2; - FLP_TimeOfDay.Visible = pkm.Format == 2; + FLP_MetDate.Visible = pk.Format >= 4; + FLP_Fateful.Visible = FLP_Ball.Visible = FLP_OriginGame.Visible = pk.Format >= 3; + FLP_MetLocation.Visible = FLP_MetLevel.Visible = pk.Format >= 2; + FLP_TimeOfDay.Visible = pk.Format == 2; // Stats - FLP_StatsTotal.Visible = pkm.Format >= 3; - FLP_Characteristic.Visible = pkm.Format >= 3; - FLP_HPType.Visible = pkm.Format >= 2; + FLP_StatsTotal.Visible = pk.Format >= 3; + FLP_Characteristic.Visible = pk.Format >= 3; + FLP_HPType.Visible = pk.Format >= 2; - PAN_Contest.Visible = pkm.Format >= 3; + PAN_Contest.Visible = pk.Format >= 3; - if (pkm.Format == 1) + ToggleStats(pk); + CenterSubEditors(); + + return FinalizeInterface(sav, pk); + } + private void ToggleStats(PKM pk) + { + if (pk.Format == 1) { FLP_SpD.Visible = false; Label_SPA.Visible = false; Label_SPC.Visible = true; TB_HPIV.Enabled = false; - MaskedTextBox[] evControls = { TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV }; + MaskedTextBox[] evControls = {TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV}; foreach (var ctrl in evControls) { ctrl.Mask = "00000"; ctrl.Size = Stat_HP.Size; } } - else if (pkm.Format == 2) + else if (pk.Format == 2) { FLP_SpD.Visible = true; Label_SPA.Visible = true; Label_SPC.Visible = false; TB_SPDEV.Enabled = TB_SPDIV.Enabled = false; TB_HPIV.Enabled = false; - MaskedTextBox[] evControls = { TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV }; + MaskedTextBox[] evControls = {TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV}; foreach (var ctrl in evControls) { ctrl.Mask = "00000"; @@ -1821,24 +1820,19 @@ namespace PKHeX.WinForms.Controls Label_SPC.Visible = false; TB_SPDEV.Enabled = TB_SPDIV.Enabled = true; TB_HPIV.Enabled = true; - MaskedTextBox[] evControls = { TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV }; + MaskedTextBox[] evControls = {TB_SPAEV, TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPDEV}; foreach (var ctrl in evControls) { ctrl.Mask = "000"; ctrl.Size = TB_ExtraByte.Size; } } + } + private bool FinalizeInterface(SaveFile SAV, PKM pk) + { + bool init = fieldsInitialized; + fieldsInitialized = fieldsLoaded = false; - // Recenter PKM SubEditors - FLP_PKMEditors.Location = new Point((Tab_OTMisc.Width - FLP_PKMEditors.Width) / 2, FLP_PKMEditors.Location.Y); - } - public void FlickerInterface() - { - tabMain.SelectedTab = Tab_Met; // parent tab of CB_GameOrigin - tabMain.SelectedTab = Tab_Main; // first tab - } - public bool FinalizeInterface(bool init, SaveFile SAV, PKM pk) - { pkm = pk.GetType() != SAV.PKMType ? SAV.BlankPKM : pk; if (pkm.Format < 3) pkm = SAV.BlankPKM; @@ -1874,7 +1868,7 @@ namespace PKHeX.WinForms.Controls UpdateOriginGame(null, null); return TranslationRequired; } - public void CenterSubEditors() + private void CenterSubEditors() { // Recenter PKM SubEditors FLP_PKMEditors.Location = new Point((Tab_OTMisc.Width - FLP_PKMEditors.Width) / 2, FLP_PKMEditors.Location.Y); @@ -1886,7 +1880,7 @@ namespace PKHeX.WinForms.Controls if (template != null) { PopulateFields(template); - lastData = null; + LastData = null; return; } if (CB_GameOrigin.Items.Count > 0) @@ -1902,7 +1896,7 @@ namespace PKHeX.WinForms.Controls CAL_MetDate.Value = CAL_EggDate.Value = DateTime.Today; CB_Species.SelectedValue = pkm.MaxSpeciesID; CHK_Nicknamed.Checked = false; - lastData = null; + LastData = null; } public void EnableDragDrop(DragEventHandler enter, DragEventHandler drop) { @@ -1915,7 +1909,7 @@ namespace PKHeX.WinForms.Controls tab.DragDrop += drop; } } - public void LoadShowdownSet(ShowdownSet Set, SaveFile SAV) + public void LoadShowdownSet(ShowdownSet Set) { CB_Species.SelectedValue = Set.Species; CHK_Nicknamed.Checked = Set.Nickname != null; @@ -1938,11 +1932,8 @@ namespace PKHeX.WinForms.Controls { form = i; break; } CB_Form.SelectedIndex = Math.Min(CB_Form.Items.Count - 1, form); - // Set Ability - int[] abilities = SAV.Personal.GetAbilities(Set.Species, form); - int ability = Array.IndexOf(abilities, Set.Ability); - if (ability < 0) ability = 0; - CB_Ability.SelectedIndex = ability; + // Set Ability and Moves + CB_Ability.SelectedIndex = Math.Max(0, Array.IndexOf(pkm.PersonalInfo.Abilities, Set.Ability)); ComboBox[] m = { CB_Move1, CB_Move2, CB_Move3, CB_Move4 }; for (int i = 0; i < 4; i++) m[i].SelectedValue = Set.Moves[i]; @@ -1984,7 +1975,25 @@ namespace PKHeX.WinForms.Controls if (Legality.info.Relearn.Any(z => !z.Valid)) SetSuggestedRelearnMoves(silent: true); } - public void InitializeLanguage(SaveFile SAV) + public void ChangeLanguage(SaveFile sav, PKM pk) + { + // Force an update to the met locations + origintrack = GameVersion.Unknown; + + bool alreadyInit = fieldsInitialized; + fieldsInitialized = false; + InitializeLanguage(sav); + CenterSubEditors(); + PopulateFields(pk); // put data back in form + fieldsInitialized |= alreadyInit; + } + public void FlickerInterface() + { + tabMain.SelectedTab = Tab_Met; // parent tab of CB_GameOrigin + tabMain.SelectedTab = Tab_Main; // first tab + } + + private void InitializeLanguage(SaveFile SAV) { ComboBox[] cbs = { @@ -2005,7 +2014,6 @@ namespace PKHeX.WinForms.Controls PopulateFilteredDataSources(SAV); } - private void PopulateFilteredDataSources(SaveFile SAV) { GameInfo.SetItemDataSource(HaX, pkm.MaxItemID, SAV.HeldItems, pkm.Format, SAV.Version, GameInfo.Strings); diff --git a/PKHeX.WinForms/Controls/SAV Editor/BoxEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/BoxEditor.cs index 2f803c5db..0afb290d6 100644 --- a/PKHeX.WinForms/Controls/SAV Editor/BoxEditor.cs +++ b/PKHeX.WinForms/Controls/SAV Editor/BoxEditor.cs @@ -11,11 +11,11 @@ namespace PKHeX.WinForms.Controls { public partial class BoxEditor : UserControl { - public readonly List SlotPictureBoxes; - public readonly int BoxSlotCount; - public SlotChangeManager M; private SaveFile SAV => M?.SE.SAV; - public bool FlagIllegal; + public List SlotPictureBoxes { get; } + public int BoxSlotCount { get; } + public SlotChangeManager M { get; set; } + public bool FlagIllegal { get; set; } public BoxEditor() { diff --git a/PKHeX.WinForms/Controls/SAV Editor/ContextMenuSAV.cs b/PKHeX.WinForms/Controls/SAV Editor/ContextMenuSAV.cs index cdd11aa10..16687adbf 100644 --- a/PKHeX.WinForms/Controls/SAV Editor/ContextMenuSAV.cs +++ b/PKHeX.WinForms/Controls/SAV Editor/ContextMenuSAV.cs @@ -84,7 +84,7 @@ namespace PKHeX.WinForms.Controls m.SetPKM(pk, info, true, Resources.slotSet); } - editor.lastData = pk.Data; + editor.LastData = pk.Data; m.SE.RedoStack.Clear(); m.SE.Menu_Redo.Enabled = false; } private static void ClickDelete(object sender, EventArgs e) diff --git a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs index 9961fc8c8..f777cec7f 100644 --- a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs +++ b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs @@ -863,9 +863,26 @@ namespace PKHeX.WinForms.Controls public bool ToggleInterface() { - bool WindowTranslationRequired = false; FieldsLoaded = false; + ToggleViewReset(); + ToggleViewSubEditors(SAV); + + int BoxTab = tabBoxMulti.TabPages.IndexOf(Tab_Box); + int PartyTab = tabBoxMulti.TabPages.IndexOf(Tab_PartyBattle); + + bool WindowTranslationRequired = false; + WindowTranslationRequired |= ToggleViewBox(SAV); + WindowTranslationRequired |= ToggleViewParty(SAV, BoxTab); + WindowTranslationRequired |= ToggleViewDaycare(SAV, BoxTab, PartyTab); + + ToggleViewMisc(SAV); + + FieldsLoaded = true; + return WindowTranslationRequired; + } + private void ToggleViewReset() + { // Close subforms that are save dependent foreach (var z in M.Boxes.Skip(1).ToArray()) z.FindForm()?.Close(); @@ -875,133 +892,145 @@ namespace PKHeX.WinForms.Controls Box.M = M; Box.ResetBoxNames(); // Display the Box Names M.SetColor(-1, -1, null); - if (SAV.HasBox) + } + private bool ToggleViewBox(SaveFile sav) + { + if (!sav.HasBox) { - int startBox = !SAV.Exportable ? 0 : SAV.CurrentBox; // FF if BattleBox - if (startBox > SAV.BoxCount - 1) { tabBoxMulti.SelectedIndex = 1; Box.CurrentBox = 0; } - else { tabBoxMulti.SelectedIndex = 0; Box.CurrentBox = startBox; } + if (tabBoxMulti.TabPages.Contains(Tab_Box)) + tabBoxMulti.TabPages.Remove(Tab_Box); + B_SaveBoxBin.Enabled = false; + return false; } + + B_SaveBoxBin.Enabled = true; + int startBox = !sav.Exportable ? 0 : sav.CurrentBox; // FF if BattleBox + if (startBox > sav.BoxCount - 1) { tabBoxMulti.SelectedIndex = 1; Box.CurrentBox = 0; } + else { tabBoxMulti.SelectedIndex = 0; Box.CurrentBox = startBox; } SetPKMBoxes(); // Reload all of the PKX Windows - // Hide content if not present in game. - GB_SUBE.Visible = SAV.HasSUBE; - PB_Locked.Visible = SAV.HasBattleBox && SAV.BattleBoxLocked; - - if (!SAV.HasBox && tabBoxMulti.TabPages.Contains(Tab_Box)) - tabBoxMulti.TabPages.Remove(Tab_Box); - else if (SAV.HasBox && !tabBoxMulti.TabPages.Contains(Tab_Box)) + if (tabBoxMulti.TabPages.Contains(Tab_Box)) + return false; + tabBoxMulti.TabPages.Insert(0, Tab_Box); + return true; + } + private bool ToggleViewParty(SaveFile sav, int BoxTab) + { + if (!sav.HasParty) { - tabBoxMulti.TabPages.Insert(0, Tab_Box); - WindowTranslationRequired = true; - } - B_SaveBoxBin.Enabled = SAV.HasBox; - - int BoxTab = tabBoxMulti.TabPages.IndexOf(Tab_Box); - int PartyTab = tabBoxMulti.TabPages.IndexOf(Tab_PartyBattle); - - if (!SAV.HasParty && tabBoxMulti.TabPages.Contains(Tab_PartyBattle)) - tabBoxMulti.TabPages.Remove(Tab_PartyBattle); - else if (SAV.HasParty && !tabBoxMulti.TabPages.Contains(Tab_PartyBattle)) - { - int index = BoxTab; - if (index < 0) - index = -1; - tabBoxMulti.TabPages.Insert(index + 1, Tab_PartyBattle); - WindowTranslationRequired = true; + if (tabBoxMulti.TabPages.Contains(Tab_PartyBattle)) + tabBoxMulti.TabPages.Remove(Tab_PartyBattle); + return false; } - if (!SAV.HasDaycare && tabBoxMulti.TabPages.Contains(Tab_Other)) - tabBoxMulti.TabPages.Remove(Tab_Other); - else if (SAV.HasDaycare && !tabBoxMulti.TabPages.Contains(Tab_Other)) + PB_Locked.Visible = sav.HasBattleBox && sav.BattleBoxLocked; + if (tabBoxMulti.TabPages.Contains(Tab_PartyBattle)) + return false; + + int index = BoxTab; + if (index < 0) + index = -1; + tabBoxMulti.TabPages.Insert(index + 1, Tab_PartyBattle); + return true; + } + private bool ToggleViewDaycare(SaveFile sav, int BoxTab, int PartyTab) + { + + if (!sav.HasDaycare) { - int index = PartyTab; - if (index < 0) - index = BoxTab; - if (index < 0) - index = -1; - tabBoxMulti.TabPages.Insert(index + 1, Tab_Other); - WindowTranslationRequired = true; + if (tabBoxMulti.TabPages.Contains(Tab_Other)) + tabBoxMulti.TabPages.Remove(Tab_Other); + return false; } - if (SAV.Exportable) // Actual save file + SlotPictureBoxes[43].Visible = sav.Generation >= 2; // Second daycare slot + if (tabBoxMulti.TabPages.Contains(Tab_Other)) + return false; + + int index = PartyTab; + if (index < 0) + index = BoxTab; + if (index < 0) + index = -1; + tabBoxMulti.TabPages.Insert(index + 1, Tab_Other); + return true; + } + private void ToggleViewSubEditors(SaveFile sav) + { + if (sav.Exportable) // Actual save file { - PAN_BattleBox.Visible = L_BattleBox.Visible = L_ReadOnlyPBB.Visible = SAV.HasBattleBox; - GB_Daycare.Visible = SAV.HasDaycare; - GB_Fused.Visible = SAV.HasFused; - GB_GTS.Visible = SAV.HasGTS; - B_OpenSecretBase.Enabled = SAV.HasSecretBase; - B_OpenPokepuffs.Enabled = SAV.HasPuff; - B_OpenPokeBeans.Enabled = SAV.Generation == 7; - B_OpenZygardeCells.Enabled = SAV.Generation == 7; - B_OUTPasserby.Enabled = SAV.HasPSS; - B_OpenBoxLayout.Enabled = SAV.HasBoxWallpapers; - B_OpenWondercards.Enabled = SAV.HasWondercards; - B_OpenSuperTraining.Enabled = SAV.HasSuperTrain; - B_OpenHallofFame.Enabled = SAV.HasHoF; - B_OpenOPowers.Enabled = SAV.HasOPower; - B_OpenPokedex.Enabled = SAV.HasPokeDex; - B_OpenBerryField.Enabled = SAV.HasBerryField && SAV.XY; - B_OpenFriendSafari.Enabled = SAV.XY; - B_OpenPokeblocks.Enabled = SAV.HasPokeBlock; - B_JPEG.Visible = SAV.HasJPEG; - B_OpenEventFlags.Enabled = SAV.HasEvents; - B_OpenLinkInfo.Enabled = SAV.HasLink; - B_CGearSkin.Enabled = SAV.Generation == 5; + PAN_BattleBox.Visible = L_BattleBox.Visible = L_ReadOnlyPBB.Visible = sav.HasBattleBox; + GB_Daycare.Visible = sav.HasDaycare; + GB_Fused.Visible = sav.HasFused; + GB_GTS.Visible = sav.HasGTS; + B_OpenSecretBase.Enabled = sav.HasSecretBase; + B_OpenPokepuffs.Enabled = sav.HasPuff; + B_OpenPokeBeans.Enabled = sav.Generation == 7; + B_OpenZygardeCells.Enabled = sav.Generation == 7; + B_OUTPasserby.Enabled = sav.HasPSS; + B_OpenBoxLayout.Enabled = sav.HasBoxWallpapers; + B_OpenWondercards.Enabled = sav.HasWondercards; + B_OpenSuperTraining.Enabled = sav.HasSuperTrain; + B_OpenHallofFame.Enabled = sav.HasHoF; + B_OpenOPowers.Enabled = sav.HasOPower; + B_OpenPokedex.Enabled = sav.HasPokeDex; + B_OpenBerryField.Enabled = sav.HasBerryField && sav.XY; + B_OpenFriendSafari.Enabled = sav.XY; + B_OpenPokeblocks.Enabled = sav.HasPokeBlock; + B_JPEG.Visible = sav.HasJPEG; + B_OpenEventFlags.Enabled = sav.HasEvents; + B_OpenLinkInfo.Enabled = sav.HasLink; + B_CGearSkin.Enabled = sav.Generation == 5; - B_OpenTrainerInfo.Enabled = B_OpenItemPouch.Enabled = SAV.HasParty; // Box RS - B_OpenMiscEditor.Enabled = SAV is SAV3 || SAV is SAV4 || SAV is SAV5; + B_OpenTrainerInfo.Enabled = B_OpenItemPouch.Enabled = sav.HasParty; // Box RS + B_OpenMiscEditor.Enabled = sav is SAV3 || sav is SAV4 || sav is SAV5; - B_OpenHoneyTreeEditor.Enabled = SAV.DP || SAV.Pt; - B_OpenRTCEditor.Enabled = SAV.RS || SAV.E; + B_OpenHoneyTreeEditor.Enabled = sav.DP || sav.Pt; + B_OpenRTCEditor.Enabled = sav.RS || sav.E; } - GB_SAVtools.Visible = SAV.Exportable && FLP_SAVtools.Controls.Cast().Any(c => c.Enabled); + GB_SAVtools.Visible = sav.Exportable && FLP_SAVtools.Controls.Cast().Any(c => c.Enabled); foreach (Control c in FLP_SAVtools.Controls.Cast()) c.Visible = c.Enabled; - B_VerifyCHK.Enabled = SAV.Exportable; - - // Second daycare slot - SlotPictureBoxes[43].Visible = SAV.Generation >= 2; - - return WindowTranslationRequired; } - public void FinalizeInterface() + private void ToggleViewMisc(SaveFile sav) { // Generational Interface - TB_Secure1.Visible = TB_Secure2.Visible = L_Secure1.Visible = L_Secure2.Visible = SAV.Exportable && SAV.Generation >= 6; - TB_GameSync.Visible = L_GameSync.Visible = SAV.Exportable && SAV.Generation >= 6; + TB_Secure1.Visible = TB_Secure2.Visible = L_Secure1.Visible = L_Secure2.Visible = sav.Exportable && sav.Generation >= 6; + TB_GameSync.Visible = L_GameSync.Visible = sav.Exportable && sav.Generation >= 6; + GB_SUBE.Visible = SAV.HasSUBE; + B_VerifyCHK.Enabled = SAV.Exportable; - if (SAV.Version == GameVersion.BATREV) + if (sav.Version == GameVersion.BATREV) { L_SaveSlot.Visible = CB_SaveSlot.Visible = true; CB_SaveSlot.DisplayMember = "Text"; CB_SaveSlot.ValueMember = "Value"; - CB_SaveSlot.DataSource = new BindingSource(((SAV4BR)SAV).SaveSlots.Select(i => new ComboItem + CB_SaveSlot.DataSource = new BindingSource(((SAV4BR)sav).SaveSlots.Select(i => new ComboItem { - Text = ((SAV4BR)SAV).SaveNames[i], + Text = ((SAV4BR)sav).SaveNames[i], Value = i }).ToList(), null); - CB_SaveSlot.SelectedValue = ((SAV4BR)SAV).CurrentSlot; + CB_SaveSlot.SelectedValue = ((SAV4BR)sav).CurrentSlot; } else L_SaveSlot.Visible = CB_SaveSlot.Visible = false; - switch (SAV.Generation) + switch (sav.Generation) { case 6: - TB_GameSync.Enabled = SAV.GameSyncID != null; - TB_GameSync.MaxLength = SAV.GameSyncIDSize; - TB_GameSync.Text = (SAV.GameSyncID ?? 0.ToString()).PadLeft(SAV.GameSyncIDSize, '0'); - TB_Secure1.Text = SAV.Secure1?.ToString("X16"); - TB_Secure2.Text = SAV.Secure2?.ToString("X16"); + TB_GameSync.Enabled = sav.GameSyncID != null; + TB_GameSync.MaxLength = sav.GameSyncIDSize; + TB_GameSync.Text = (sav.GameSyncID ?? 0.ToString()).PadLeft(sav.GameSyncIDSize, '0'); + TB_Secure1.Text = sav.Secure1?.ToString("X16"); + TB_Secure2.Text = sav.Secure2?.ToString("X16"); break; case 7: - TB_GameSync.Enabled = SAV.GameSyncID != null; - TB_GameSync.MaxLength = SAV.GameSyncIDSize; - TB_GameSync.Text = (SAV.GameSyncID ?? 0.ToString()).PadLeft(SAV.GameSyncIDSize, '0'); - TB_Secure1.Text = SAV.Secure1?.ToString("X16"); - TB_Secure2.Text = SAV.Secure2?.ToString("X16"); + TB_GameSync.Enabled = sav.GameSyncID != null; + TB_GameSync.MaxLength = sav.GameSyncIDSize; + TB_GameSync.Text = (sav.GameSyncID ?? 0.ToString()).PadLeft(sav.GameSyncIDSize, '0'); + TB_Secure1.Text = sav.Secure1?.ToString("X16"); + TB_Secure2.Text = sav.Secure2?.ToString("X16"); break; } - FieldsLoaded = true; } // DragDrop diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index 2b91c1eb0..8d772b299 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -33,6 +33,7 @@ namespace PKHeX.WinForms FormLoadInitialFiles(args); IsInitialized = true; // Splash Screen closes on its own. + PKME_Tabs_UpdatePreviewSprite(null, null); BringToFront(); WindowState = FormWindowState.Minimized; Show(); @@ -52,8 +53,7 @@ namespace PKHeX.WinForms get => GameInfo.CurrentLanguage; private set => GameInfo.CurrentLanguage = value; } - public static string[] GenderSymbols { get; private set; } = {"♂", "♀", "-"}; - private static bool _unicode; + private static bool _unicode { get; set; } public static bool Unicode { get => _unicode; @@ -64,9 +64,10 @@ namespace PKHeX.WinForms } } - public static bool HaX; - public static bool IsInitialized; - private static readonly string[] main_langlist = + public static string[] GenderSymbols { get; private set; } = { "♂", "♀", "-" }; + public static bool HaX { get; private set; } + public static bool IsInitialized { get; private set; } + private readonly string[] main_langlist = { "日本語", // JPN "English", // ENG @@ -101,7 +102,7 @@ namespace PKHeX.WinForms // Set up Language Selection foreach (var cbItem in main_langlist) CB_MainLanguage.Items.Add(cbItem); - C_SAV.HaX = PKME_Tabs.HaX = HaX = args.Any(x => x.Trim('-').ToLower() == "hax"); + C_SAV.HaX = PKME_Tabs.HaX = HaX = args.Any(x => string.Equals(x.Trim('-'), nameof(HaX), StringComparison.CurrentCultureIgnoreCase)); PB_Legal.Visible = !HaX; int languageID = 1; // English @@ -404,25 +405,33 @@ namespace PKHeX.WinForms if (Set.Species < 0) { WinFormsUtil.Alert("Set data not found in clipboard."); return; } - if (Set.Nickname != null && Set.Nickname.Length > C_SAV.SAV.NickLength) + if (Set.Nickname?.Length > C_SAV.SAV.NickLength) Set.Nickname = Set.Nickname.Substring(0, C_SAV.SAV.NickLength); - if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Import this set?", Set.Text)) - { return; } + if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Import this set?", Set.Text)) + return; if (Set.InvalidLines.Any()) WinFormsUtil.Alert("Invalid lines detected:", string.Join(Environment.NewLine, Set.InvalidLines)); // Set Species & Nickname - PKME_Tabs.LoadShowdownSet(Set, C_SAV.SAV); + PKME_Tabs.LoadShowdownSet(Set); } private void ClickShowdownExportPKM(object sender, EventArgs e) { if (!PKME_Tabs.VerifiedPKM()) - { WinFormsUtil.Alert("Fix data before exporting."); return; } + { + WinFormsUtil.Alert("Fix data before exporting."); + return; + } - Clipboard.SetText(PreparePKM().ShowdownText); - WinFormsUtil.Alert("Exported Showdown Set to Clipboard:", Clipboard.GetText()); + var text = PreparePKM().ShowdownText; + Clipboard.SetText(text); + var clip = Clipboard.GetText(); + if (clip != text) + WinFormsUtil.Alert("Unable to set to Clipboard.", "Try exporting again."); + else + WinFormsUtil.Alert("Exported Showdown Set to Clipboard:", text); } private void ClickShowdownExportParty(object sender, EventArgs e) { @@ -570,7 +579,7 @@ namespace PKHeX.WinForms if (temp == null) return false; - var type = PKME_Tabs.pkm.GetType(); + var type = PKME_Tabs.CurrentPKM.GetType(); PKM pk = PKMConverter.ConvertToType(temp, type, out string c); if (pk == null) { @@ -757,25 +766,23 @@ namespace PKHeX.WinForms private void ResetSAVPKMEditors(SaveFile sav) { bool WindowToggleRequired = C_SAV.SAV.Generation < 3 && sav.Generation >= 3; // version combobox refresh hack - bool WindowTranslationRequired = false; PKM pk = PreparePKM(); - PKME_Tabs.pkm = sav.BlankPKM; + var blank = sav.BlankPKM; + PKME_Tabs.CurrentPKM = blank; PKME_Tabs.SetPKMFormatMode(sav.Generation); - PKME_Tabs.PopulateFields(PKME_Tabs.pkm); + PKME_Tabs.PopulateFields(blank); C_SAV.SAV = sav; - // Initialize Subviews - PKME_Tabs.ToggleInterface(); - bool init = PKME_Tabs.fieldsInitialized; - PKME_Tabs.fieldsInitialized = PKME_Tabs.fieldsLoaded = false; - WindowTranslationRequired |= PKME_Tabs.FinalizeInterface(init, sav, pk); - WindowTranslationRequired |= C_SAV.ToggleInterface(); - C_SAV.FinalizeInterface(); - - // Finalize Overall Info + // Initialize Overall Info Menu_LoadBoxes.Enabled = Menu_DumpBoxes.Enabled = Menu_Report.Enabled = Menu_Modify.Enabled = C_SAV.SAV.HasBox; + + // Initialize Subviews + bool WindowTranslationRequired = false; + WindowTranslationRequired |= PKME_Tabs.ToggleInterface(sav, pk); + WindowTranslationRequired |= C_SAV.ToggleInterface(); if (WindowTranslationRequired) // force update -- re-added controls may be untranslated WinFormsUtil.TranslateInterface(this, CurrentLanguage); + if (WindowToggleRequired) // Version combobox selectedvalue needs a little help, only updates once it is visible PKME_Tabs.FlickerInterface(); @@ -923,20 +930,16 @@ namespace PKHeX.WinForms Thread.CurrentThread.CurrentCulture = new CultureInfo(CurrentLanguage.Substring(0, 2)); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; - PKM pk = C_SAV.SAV.GetPKM((PKME_Tabs.fieldsInitialized ? PreparePKM() : PKME_Tabs.pkm).Data); - bool alreadyInit = PKME_Tabs.fieldsInitialized; - PKME_Tabs.fieldsInitialized = false; Menu_Options.DropDown.Close(); + + PKM pk = C_SAV.SAV.GetPKM(PKME_Tabs.CurrentPKM.Data); InitializeStrings(); - PKME_Tabs.InitializeLanguage(C_SAV.SAV); + PKME_Tabs.ChangeLanguage(C_SAV.SAV, pk); string ProgramTitle = Text; WinFormsUtil.TranslateInterface(this, CurrentLanguage); // Translate the UI to language. Text = ProgramTitle; - PKME_Tabs.CenterSubEditors(); - PKME_Tabs.PopulateFields(pk); // put data back in form - PKME_Tabs.fieldsInitialized |= alreadyInit; } - private void InitializeStrings() + private static void InitializeStrings() { string l = CurrentLanguage; GameInfo.Strings = GameInfo.GetStrings(l); @@ -945,15 +948,9 @@ namespace PKHeX.WinForms // Clipboard.SetText(string.Join(Environment.NewLine, Util.GetLocalization(typeof(LegalityCheckStrings)))); Task.Run(() => Util.SetLocalization(typeof(LegalityCheckStrings), Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.Substring(0, 2))); - // Force an update to the met locations - PKME_Tabs.origintrack = GameVersion.Unknown; - // Update Legality Analysis strings LegalityAnalysis.MoveStrings = GameInfo.Strings.movelist; LegalityAnalysis.SpeciesStrings = GameInfo.Strings.specieslist; - - if (PKME_Tabs.fieldsInitialized) - PKME_Tabs.UpdateStringDisplay(); } #endregion @@ -1068,7 +1065,8 @@ namespace PKHeX.WinForms } private void GetPreview(PictureBox pb, PKM pk = null) { - if (!PKME_Tabs.fieldsInitialized) return; + if (!IsInitialized) + return; pk = pk ?? PreparePKM(false); // don't perform control loss click if (pb == dragout) dragout.ContextMenuStrip.Enabled = pk.Species != 0 || HaX; // Species @@ -1080,14 +1078,14 @@ namespace PKHeX.WinForms private void PKME_Tabs_UpdatePreviewSprite(object sender, EventArgs e) => GetPreview(dragout); private void PKME_Tabs_LegalityChanged(object sender, EventArgs e) { - if (PKME_Tabs.IsLegal == null || HaX) + if (sender == null || HaX) { PB_Legal.Visible = false; return; } PB_Legal.Visible = true; - PB_Legal.Image = PKME_Tabs.IsLegal == false ? Resources.warn : Resources.valid; + PB_Legal.Image = sender as bool? == false ? Resources.warn : Resources.valid; } private void PKME_Tabs_RequestShowdownExport(object sender, EventArgs e) => ClickShowdownExportPKM(sender, e); private void PKME_Tabs_RequestShowdownImport(object sender, EventArgs e) => ClickShowdownImportPKM(sender, e);