From 32abc6daf41fa59339d5ec567bc7a9b238c92e7b Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 25 Oct 2017 19:37:31 -0700 Subject: [PATCH] speed up pkm loading slightly PreparePKM had the opportunity to be recursive (preparation -> validating*N -> preparation*N), lock out preview sprite updating (which calls PreparePKM via Main.cs) while validating all controls remove uncallable paths (format is checked prior, and checksum check is never called as fieldsInitialized is forced false) move gui toggling to loading methods when appropriate --- PKHeX.WinForms/Controls/PKM Editor/EditPK4.cs | 1 + PKHeX.WinForms/Controls/PKM Editor/EditPK5.cs | 1 + PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs | 1 + .../Controls/PKM Editor/LoadSave.cs | 3 ++ .../Controls/PKM Editor/PKMEditor.cs | 38 +++++-------------- 5 files changed, 16 insertions(+), 28 deletions(-) diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK4.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK4.cs index 786ad8c22..727282e60 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK4.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK4.cs @@ -16,6 +16,7 @@ private void PopulateFieldsPK4() LoadMisc4(pk4); CB_EncounterType.SelectedValue = pk4.Gen4 ? pk4.EncounterType : 0; + CB_EncounterType.Visible = Label_EncounterType.Visible = pkm.Gen4; if (HaX) DEV_Ability.SelectedValue = pk4.Ability; diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK5.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK5.cs index 46d76c8b4..208a447b5 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK5.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK5.cs @@ -14,6 +14,7 @@ private void PopulateFieldsPK5() LoadMisc3(pk5); LoadMisc4(pk5); CB_EncounterType.SelectedValue = pk5.Gen4 ? pk5.EncounterType : 0; + CB_EncounterType.Visible = Label_EncounterType.Visible = pkm.Gen4; CHK_NSparkle.Checked = pk5.NPokémon; if (HaX) diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs index c4146982a..5c0e7377c 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs @@ -16,6 +16,7 @@ private void PopulateFieldsPK6() LoadMisc6(pk6); CB_EncounterType.SelectedValue = pk6.Gen4 ? pk6.EncounterType : 0; + CB_EncounterType.Visible = Label_EncounterType.Visible = pkm.Gen4; LoadPartyStats(pk6); UpdateStats(); diff --git a/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs b/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs index c60a4da0b..2fe7b261f 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs @@ -251,6 +251,9 @@ private void LoadMisc2(PKM pk) CB_HeldItem.SelectedValue = pk.HeldItem; CB_Form.SelectedIndex = CB_Form.Items.Count > pk.AltForm ? pk.AltForm : CB_Form.Items.Count - 1; TB_Friendship.Text = pk.CurrentFriendship.ToString(); + + Label_HatchCounter.Visible = CHK_IsEgg.Checked && pkm.Format > 1; + Label_Friendship.Visible = !CHK_IsEgg.Checked && pkm.Format > 1; } private void SaveMisc2(PKM pk) { diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index c9750d786..37b648203 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -62,10 +62,15 @@ public PKMEditor() 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; + private bool forceValidation; public PKM PreparePKM(bool click = true) { if (click) + { + forceValidation = true; ValidateChildren(); + forceValidation = false; + } PKM pk = GetPKMfromFields(); return pk?.Clone(); } @@ -102,9 +107,6 @@ public void InitializeFields() { // Now that the ComboBoxes are ready, load the data. fieldsInitialized = true; - pkm.RefreshChecksum(); - - // Load Data PopulateFields(pkm); } @@ -173,34 +175,17 @@ public void SetPKMFormatMode(int Format) public void PopulateFields(PKM pk, bool focus = true) { if (pk == null) { WinFormsUtil.Error("Attempted to load a null file."); return; } - - if (!PKMConverter.IsConvertibleToFormat(pk, pkm.Format)) - { WinFormsUtil.Alert($"Can't load Gen{pk.Format} to Gen{pkm.Format} games."); return; } - - bool oldInit = fieldsInitialized; - fieldsInitialized = fieldsLoaded = false; if (focus) Tab_Main.Focus(); - if (fieldsInitialized & !pkm.ChecksumValid) - WinFormsUtil.Alert("PKM File has an invalid checksum."); + bool oldInit = fieldsInitialized; + fieldsInitialized = fieldsLoaded = false; - if (pk.Format != pkm.Format) // past gen format - { - pkm = PKMConverter.ConvertToType(pk.Clone(), pkm.GetType(), out string _); - if (pkm == null) - pkm = pk.Clone(); - else if (pk.Format != pkm.Format && focus) // converted - WinFormsUtil.Alert("Converted File."); - } - else - pkm = pk.Clone(); + pkm = pk.Clone(); try { GetFieldsfromPKM(); } - catch { fieldsInitialized = oldInit; throw; } + finally { fieldsInitialized = oldInit; } - CB_EncounterType.Visible = Label_EncounterType.Visible = pkm.Gen4 && pkm.Format < 7; - fieldsInitialized = oldInit; UpdateIVs(null, null); UpdatePKRSInfected(null, null); UpdatePKRSCured(null, null); @@ -222,9 +207,6 @@ public void PopulateFields(PKM pk, bool focus = true) } fieldsLoaded = true; - Label_HatchCounter.Visible = CHK_IsEgg.Checked && pkm.Format > 1; - Label_Friendship.Visible = !CHK_IsEgg.Checked && pkm.Format > 1; - SetMarkings(); UpdateLegality(); UpdateSprite(); @@ -293,7 +275,7 @@ public void UpdateUnicode(string[] symbols) } private void UpdateSprite() { - if (fieldsLoaded && fieldsInitialized) + if (fieldsLoaded && fieldsInitialized && !forceValidation) UpdatePreviewSprite?.Invoke(this, null); }