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
This commit is contained in:
Kurt 2017-10-25 19:37:31 -07:00
parent a6ef105544
commit 32abc6daf4
5 changed files with 16 additions and 28 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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();

View File

@ -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)
{

View File

@ -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);
}