mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-10 22:54:14 +00:00
Minor refactoring for pkmeditor GUI
Cleans up some interactions to be a little more obvious
This commit is contained in:
parent
de94876822
commit
4ec60916c1
8 changed files with 188 additions and 141 deletions
|
@ -33,7 +33,6 @@ namespace PKHeX.WinForms.Controls
|
|||
SaveMisc3(pk6);
|
||||
SaveMisc4(pk6);
|
||||
SaveMisc6(pk6);
|
||||
CheckTransferPIDValid(pk6);
|
||||
|
||||
pk6.GroundTile = (GroundTileType)WinFormsUtil.GetIndex(CB_GroundTile);
|
||||
|
||||
|
|
|
@ -30,14 +30,13 @@ namespace PKHeX.WinForms.Controls
|
|||
SaveMisc3(pk7);
|
||||
SaveMisc4(pk7);
|
||||
SaveMisc6(pk7);
|
||||
CheckTransferPIDValid(pk7);
|
||||
|
||||
// Toss in Party Stats
|
||||
SavePartyStats(pk7);
|
||||
|
||||
// Unneeded Party Stats (Status, Flags, Unused)
|
||||
pk7.Data[0xE8] = pk7.Data[0xE9] = pk7.Data[0xEA] = pk7.Data[0xEB] =
|
||||
pk7.Data[0xED] = pk7.Data[0xEE] = pk7.Data[0xEF] =
|
||||
pk7.Status_Condition = pk7.DirtType = pk7.DirtLocation =
|
||||
pk7.Data[0xEF] =
|
||||
pk7.Data[0xFE] = pk7.Data[0xFF] = pk7.Data[0x100] =
|
||||
pk7.Data[0x101] = pk7.Data[0x102] = pk7.Data[0x103] = 0;
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@ namespace PKHeX.WinForms.Controls
|
|||
SaveMisc4(pk8);
|
||||
SaveMisc6(pk8);
|
||||
SaveMisc8(pk8);
|
||||
CheckTransferPIDValid(pk8);
|
||||
|
||||
// Toss in Party Stats
|
||||
SavePartyStats(pk8);
|
||||
|
|
|
@ -20,10 +20,13 @@ namespace PKHeX.WinForms.Controls
|
|||
|
||||
private void LoadSpeciesLevelEXP(PKM pk)
|
||||
{
|
||||
// Do first
|
||||
pk.Stat_Level = Experience.GetLevel(pk.EXP, pk.PersonalInfo.EXPGrowth);
|
||||
if (pk.Stat_Level == 100 && !HaX)
|
||||
pk.EXP = Experience.GetEXP(pk.Stat_Level, pk.PersonalInfo.EXPGrowth);
|
||||
if (!HaX)
|
||||
{
|
||||
// Sanity check level and EXP
|
||||
var current = pk.CurrentLevel;
|
||||
if (current == 100) // clamp back to max EXP
|
||||
pk.CurrentLevel = 100;
|
||||
}
|
||||
|
||||
CB_Species.SelectedValue = pk.Species;
|
||||
TB_Level.Text = pk.Stat_Level.ToString();
|
||||
|
@ -34,11 +37,12 @@ namespace PKHeX.WinForms.Controls
|
|||
{
|
||||
pk.Species = WinFormsUtil.GetIndex(CB_Species);
|
||||
pk.EXP = Util.ToUInt32(TB_EXP.Text);
|
||||
pk.Stat_Level = Util.ToInt32(TB_Level.Text);
|
||||
}
|
||||
|
||||
private void LoadOT(PKM pk)
|
||||
{
|
||||
GB_OT.BackgroundImage = null;
|
||||
GB_OT.BackgroundImage = null; // clear the Current Handler indicator just in case we switched formats.
|
||||
TB_OT.Text = pk.OT_Name;
|
||||
Label_OTGender.Text = gendersymbols[pk.OT_Gender];
|
||||
Label_OTGender.ForeColor = Draw.GetGenderColor(pk.OT_Gender);
|
||||
|
@ -52,11 +56,10 @@ namespace PKHeX.WinForms.Controls
|
|||
|
||||
private void LoadPKRS(PKM pk)
|
||||
{
|
||||
Label_PKRS.Visible = CB_PKRSStrain.Visible = CHK_Infected.Checked = pk.PKRS_Strain != 0;
|
||||
Label_PKRSdays.Visible = CB_PKRSDays.Visible = pk.PKRS_Days != 0;
|
||||
Label_PKRS.Visible = CB_PKRSStrain.Visible = CHK_Infected.Checked = Label_PKRSdays.Visible = CB_PKRSDays.Visible = pk.PKRS_Infected;
|
||||
CB_PKRSStrain.SelectedIndex = pk.PKRS_Strain;
|
||||
CHK_Cured.Checked = pk.PKRS_Strain > 0 && pk.PKRS_Days == 0;
|
||||
CB_PKRSDays.SelectedIndex = Math.Min(CB_PKRSDays.Items.Count - 1, pk.PKRS_Days); // to strip out bad hacked 'rus
|
||||
CHK_Cured.Checked = pk.PKRS_Cured;
|
||||
CB_PKRSDays.SelectedIndex = Math.Min(CB_PKRSDays.Items.Count - 1, pk.PKRS_Days); // clamp to valid day values for the current strain
|
||||
}
|
||||
|
||||
private void SavePKRS(PKM pk)
|
||||
|
@ -67,7 +70,7 @@ namespace PKHeX.WinForms.Controls
|
|||
|
||||
private void LoadIVs(PKM pk) => Stats.LoadIVs(pk.IVs);
|
||||
private void LoadEVs(PKM pk) => Stats.LoadEVs(pk.EVs);
|
||||
private void LoadAVs(IAwakened a) => Stats.LoadAVs(a);
|
||||
private void LoadAVs(IAwakened pk) => Stats.LoadAVs(pk);
|
||||
|
||||
private void LoadMoves(PKM pk)
|
||||
{
|
||||
|
@ -101,20 +104,20 @@ namespace PKHeX.WinForms.Controls
|
|||
pk.Move4_PPUps = WinFormsUtil.GetIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;
|
||||
}
|
||||
|
||||
private void LoadShadow3(IShadowPKM ck3)
|
||||
private void LoadShadow3(IShadowPKM pk)
|
||||
{
|
||||
NUD_ShadowID.Value = ck3.ShadowID;
|
||||
FLP_Purification.Visible = ck3.ShadowID > 0;
|
||||
if (ck3.ShadowID > 0)
|
||||
NUD_ShadowID.Value = pk.ShadowID;
|
||||
FLP_Purification.Visible = pk.ShadowID > 0;
|
||||
if (pk.ShadowID > 0)
|
||||
{
|
||||
int value = ck3.Purification;
|
||||
int value = pk.Purification;
|
||||
if (value < NUD_Purification.Minimum)
|
||||
value = (int)NUD_Purification.Minimum;
|
||||
|
||||
NUD_Purification.Value = value;
|
||||
CHK_Shadow.Checked = ck3.IsShadow;
|
||||
CHK_Shadow.Checked = pk.IsShadow;
|
||||
|
||||
NUD_ShadowID.Value = Math.Max(ck3.ShadowID, 0);
|
||||
NUD_ShadowID.Value = Math.Max(pk.ShadowID, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -124,11 +127,11 @@ namespace PKHeX.WinForms.Controls
|
|||
}
|
||||
}
|
||||
|
||||
private void SaveShadow3(IShadowPKM ck3)
|
||||
private void SaveShadow3(IShadowPKM pk)
|
||||
{
|
||||
ck3.ShadowID = (int)NUD_ShadowID.Value;
|
||||
if (ck3.ShadowID > 0)
|
||||
ck3.Purification = (int)NUD_Purification.Value;
|
||||
pk.ShadowID = (int)NUD_ShadowID.Value;
|
||||
if (pk.ShadowID > 0)
|
||||
pk.Purification = (int)NUD_Purification.Value;
|
||||
}
|
||||
|
||||
private void LoadRelearnMoves(PKM pk)
|
||||
|
@ -139,12 +142,12 @@ namespace PKHeX.WinForms.Controls
|
|||
CB_RelearnMove4.SelectedValue = pk.RelearnMove4;
|
||||
}
|
||||
|
||||
private void SaveRelearnMoves(PKM pk7)
|
||||
private void SaveRelearnMoves(PKM pk)
|
||||
{
|
||||
pk7.RelearnMove1 = WinFormsUtil.GetIndex(CB_RelearnMove1);
|
||||
pk7.RelearnMove2 = WinFormsUtil.GetIndex(CB_RelearnMove2);
|
||||
pk7.RelearnMove3 = WinFormsUtil.GetIndex(CB_RelearnMove3);
|
||||
pk7.RelearnMove4 = WinFormsUtil.GetIndex(CB_RelearnMove4);
|
||||
pk.RelearnMove1 = WinFormsUtil.GetIndex(CB_RelearnMove1);
|
||||
pk.RelearnMove2 = WinFormsUtil.GetIndex(CB_RelearnMove2);
|
||||
pk.RelearnMove3 = WinFormsUtil.GetIndex(CB_RelearnMove3);
|
||||
pk.RelearnMove4 = WinFormsUtil.GetIndex(CB_RelearnMove4);
|
||||
}
|
||||
|
||||
private void LoadMisc1(PKM pk)
|
||||
|
@ -176,8 +179,8 @@ namespace PKHeX.WinForms.Controls
|
|||
|
||||
TB_Friendship.Text = pk.CurrentFriendship.ToString();
|
||||
|
||||
Label_HatchCounter.Visible = CHK_IsEgg.Checked && Entity.Format > 1;
|
||||
Label_Friendship.Visible = !CHK_IsEgg.Checked && Entity.Format > 1;
|
||||
Label_HatchCounter.Visible = CHK_IsEgg.Checked;
|
||||
Label_Friendship.Visible = !CHK_IsEgg.Checked;
|
||||
}
|
||||
|
||||
private void SaveMisc2(PKM pk)
|
||||
|
@ -210,7 +213,9 @@ namespace PKHeX.WinForms.Controls
|
|||
TID_Trainer.LoadIDValues(pk);
|
||||
|
||||
// Load Extrabyte Value
|
||||
TB_ExtraByte.Text = pk.Data[Convert.ToInt32(CB_ExtraBytes.Text, 16)].ToString();
|
||||
var offset = Convert.ToInt32(CB_ExtraBytes.Text, 16);
|
||||
var value = pk.Data[offset];
|
||||
TB_ExtraByte.Text = value.ToString();
|
||||
}
|
||||
|
||||
private void SaveMisc3(PKM pk)
|
||||
|
@ -274,12 +279,16 @@ namespace PKHeX.WinForms.Controls
|
|||
private void LoadMisc6(PKM pk)
|
||||
{
|
||||
TB_EC.Text = $"{pk.EncryptionConstant:X8}";
|
||||
int abil = pk.AbilityNumber < 6 ? pk.AbilityNumber >> 1 : 0;
|
||||
if (CB_Ability.Items.Count <= abil)
|
||||
abil = CB_Ability.Items.Count - 1;
|
||||
CB_Ability.SelectedIndex = abil; // with some simple error handling
|
||||
DEV_Ability.SelectedValue = pk.Ability;
|
||||
TB_AbilityNumber.Text = pk.AbilityNumber.ToString();
|
||||
|
||||
// with some simple error handling
|
||||
var bitNumber = pk.AbilityNumber;
|
||||
int abilityIndex = AbilityVerifier.IsValidAbilityBits(bitNumber) ? bitNumber >> 1 : 0;
|
||||
if (abilityIndex >= CB_Ability.Items.Count) // sanity check ability count being possible
|
||||
abilityIndex = CB_Ability.Items.Count - 1; // last possible index, if out of range
|
||||
|
||||
CB_Ability.SelectedIndex = abilityIndex;
|
||||
TB_AbilityNumber.Text = bitNumber.ToString();
|
||||
|
||||
LoadRelearnMoves(pk);
|
||||
LoadHandlingTrainer(pk);
|
||||
|
@ -291,6 +300,9 @@ namespace PKHeX.WinForms.Controls
|
|||
private void SaveMisc6(PKM pk)
|
||||
{
|
||||
pk.EncryptionConstant = Util.GetHexValue(TB_EC.Text);
|
||||
if (PIDVerifier.GetTransferEC(pk, out var ec))
|
||||
pk.EncryptionConstant = ec;
|
||||
|
||||
pk.AbilityNumber = Util.ToInt32(TB_AbilityNumber.Text);
|
||||
|
||||
SaveRelearnMoves(pk);
|
||||
|
@ -316,26 +328,29 @@ namespace PKHeX.WinForms.Controls
|
|||
|
||||
private void LoadHandlingTrainer(PKM pk)
|
||||
{
|
||||
TB_OTt2.Text = pk.HT_Name;
|
||||
var handler = pk.HT_Name;
|
||||
int gender = pk.HT_Gender & 1;
|
||||
|
||||
TB_OTt2.Text = handler;
|
||||
// Set CT Gender to None if no CT, else set to gender symbol.
|
||||
Label_CTGender.Text = string.IsNullOrEmpty(pk.HT_Name) ? string.Empty : gendersymbols[gender];
|
||||
Label_CTGender.Text = string.IsNullOrEmpty(handler) ? string.Empty : gendersymbols[gender];
|
||||
Label_CTGender.ForeColor = Draw.GetGenderColor(gender);
|
||||
|
||||
// Indicate who is currently in possession of the PKM
|
||||
UpadteHandlingTrainerBackground(pk);
|
||||
UpadteHandlingTrainerBackground(pk.CurrentHandler);
|
||||
}
|
||||
|
||||
private void UpadteHandlingTrainerBackground(PKM pk)
|
||||
private void UpadteHandlingTrainerBackground(int handler)
|
||||
{
|
||||
if (pk.CurrentHandler == 0) // OT
|
||||
var activeColor = ImageUtil.ChangeOpacity(SpriteUtil.Spriter.Set, 0.5);
|
||||
if (handler == 0) // OT
|
||||
{
|
||||
GB_OT.BackgroundImage = ImageUtil.ChangeOpacity(SpriteUtil.Spriter.Set, 0.5);
|
||||
GB_OT.BackgroundImage = activeColor;
|
||||
GB_nOT.BackgroundImage = null;
|
||||
}
|
||||
else // Handling Trainer
|
||||
{
|
||||
GB_nOT.BackgroundImage = ImageUtil.ChangeOpacity(SpriteUtil.Spriter.Set, 0.5);
|
||||
GB_nOT.BackgroundImage = activeColor;
|
||||
GB_OT.BackgroundImage = null;
|
||||
}
|
||||
}
|
||||
|
@ -346,37 +361,6 @@ namespace PKHeX.WinForms.Controls
|
|||
pk.HT_Gender = PKX.GetGenderFromString(Label_CTGender.Text) & 1;
|
||||
}
|
||||
|
||||
// Misc
|
||||
private static void CheckTransferPIDValid(PKM pk)
|
||||
{
|
||||
var ver = pk.Version;
|
||||
if (ver is 0 or >= (int)GameVersion.X) // Gen6+ ignored
|
||||
return;
|
||||
|
||||
uint EC = pk.EncryptionConstant;
|
||||
uint PID = pk.PID;
|
||||
uint LID = PID & 0xFFFF;
|
||||
uint HID = PID >> 16;
|
||||
uint XOR = (uint)(pk.TID ^ LID ^ pk.SID ^ HID);
|
||||
|
||||
// Ensure we don't have a shiny.
|
||||
if (XOR >> 3 == 1) // Illegal, fix. (not 16<XOR>=8)
|
||||
{
|
||||
// Keep as shiny, so we have to mod the EC
|
||||
pk.EncryptionConstant = PID ^ 0x80000000;
|
||||
}
|
||||
else if ((XOR ^ 0x8000) >> 3 == 1 && PID != EC)
|
||||
{
|
||||
// Already anti-shiny, ensure the anti-shiny relationship is present.
|
||||
pk.EncryptionConstant = PID ^ 0x80000000;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ensure the copy correlation is present.
|
||||
pk.EncryptionConstant = PID;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadAbility4(PKM pk)
|
||||
{
|
||||
var index = GetAbilityIndex4(pk);
|
||||
|
|
|
@ -21,14 +21,13 @@ namespace PKHeX.WinForms.Controls
|
|||
InitializeComponent();
|
||||
|
||||
// Groupbox doesn't show Click event in Designer...
|
||||
GB_OT.Click += (_, args) => ClickGT(GB_OT, args);
|
||||
GB_nOT.Click += (_, args) => ClickGT(GB_nOT, args);
|
||||
GB_CurrentMoves.Click += (_, args) => ClickMoves(GB_CurrentMoves, args);
|
||||
GB_RelearnMoves.Click += (_, args) => ClickMoves(GB_RelearnMoves, args);
|
||||
GB_OT.Click += ClickGT;
|
||||
GB_nOT.Click += ClickGT;
|
||||
GB_CurrentMoves.Click += ClickMoves;
|
||||
GB_RelearnMoves.Click += ClickMoves;
|
||||
|
||||
TB_Nickname.Font = FontUtil.GetPKXFont();
|
||||
TB_OT.Font = (Font)TB_Nickname.Font.Clone();
|
||||
TB_OTt2.Font = (Font)TB_Nickname.Font.Clone();
|
||||
var font = FontUtil.GetPKXFont();
|
||||
TB_Nickname.Font = TB_OT.Font = TB_OTt2.Font = font;
|
||||
|
||||
// Commonly reused Control arrays
|
||||
Moves = new[] { CB_Move1, CB_Move2, CB_Move3, CB_Move4 };
|
||||
|
@ -36,21 +35,56 @@ namespace PKHeX.WinForms.Controls
|
|||
PPUps = new[] { CB_PPu1, CB_PPu2, CB_PPu3, CB_PPu4 };
|
||||
MovePP = new[] { TB_PP1, TB_PP2, TB_PP3, TB_PP4 };
|
||||
Markings = new[] { PB_Mark1, PB_Mark2, PB_Mark3, PB_Mark4, PB_Mark5, PB_Mark6 };
|
||||
ValidationRequired = Moves.Concat(Relearn).Concat(new[]
|
||||
{
|
||||
CB_Species, CB_Nature, CB_HeldItem, CB_Ability, // Main Tab
|
||||
CB_MetLocation, CB_EggLocation, CB_Ball, // Met Tab
|
||||
CB_StatNature,
|
||||
}).ToArray();
|
||||
|
||||
// Legality Indicators
|
||||
relearnPB = new[] { PB_WarnRelearn1, PB_WarnRelearn2, PB_WarnRelearn3, PB_WarnRelearn4 };
|
||||
movePB = new[] { PB_WarnMove1, PB_WarnMove2, PB_WarnMove3, PB_WarnMove4 };
|
||||
|
||||
// Validation of incompletely entered data fields
|
||||
bool Criteria(Control c) => c.BackColor == Draw.InvalidSelection && c is ComboBox x && x.Items.Count is not 0;
|
||||
ValidatedControls = new ValidationRequiredSet[]
|
||||
{
|
||||
new(Moves, _ => true, Criteria),
|
||||
new(new[] {CB_Species}, _ => true, Criteria),
|
||||
new(new[] {CB_HeldItem}, pk => pk.Format >= 2, Criteria),
|
||||
new(new[] {CB_Ability, CB_Nature, CB_MetLocation, CB_Ball}, pk => pk.Format >= 3, Criteria),
|
||||
new(new[] {CB_EggLocation}, pk => pk.Format >= 4, Criteria),
|
||||
new(new [] {CB_Country, CB_SubRegion}, pk => pk is PK6 or PK7, Criteria),
|
||||
new(Relearn, pk => pk.Format >= 6, Criteria),
|
||||
new(new[] {CB_StatNature}, pk => pk.Format >= 8, Criteria),
|
||||
};
|
||||
|
||||
foreach (var c in WinFormsUtil.GetAllControlsOfType<ComboBox>(this))
|
||||
c.KeyDown += WinFormsUtil.RemoveDropCB;
|
||||
|
||||
Stats.MainEditor = this;
|
||||
LoadShowdownSet = LoadShowdownSetDefault;
|
||||
TID_Trainer.UpdatedID += (_, args) => Update_ID(TID_Trainer, args);
|
||||
TID_Trainer.UpdatedID += Update_ID;
|
||||
|
||||
// Controls contained in a TabPage are not created until the tab page is shown
|
||||
// Any data bindings in these controls are not activated until the tab page is shown.
|
||||
FlickerInterface();
|
||||
}
|
||||
|
||||
private class ValidationRequiredSet
|
||||
{
|
||||
private readonly Control[] Controls;
|
||||
private readonly Func<PKM, bool> ShouldCheck;
|
||||
private readonly Func<Control, bool> IsInvalidState;
|
||||
|
||||
public Control? IsNotValid(PKM pk)
|
||||
{
|
||||
if (!ShouldCheck(pk))
|
||||
return null;
|
||||
return Array.Find(Controls, z => IsInvalidState(z));
|
||||
}
|
||||
|
||||
public ValidationRequiredSet(Control[] controls, Func<PKM, bool> shouldCheck, Func<Control, bool> state)
|
||||
{
|
||||
Controls = controls;
|
||||
ShouldCheck = shouldCheck;
|
||||
IsInvalidState = state;
|
||||
}
|
||||
}
|
||||
|
||||
public void InitializeBinding()
|
||||
|
@ -149,7 +183,8 @@ namespace PKHeX.WinForms.Controls
|
|||
public SaveFile RequestSaveFile => SaveFileRequested.Invoke(this, EventArgs.Empty);
|
||||
public bool PKMIsUnsaved => FieldsLoaded && LastData.Any(b => b != 0) && !LastData.SequenceEqual(CurrentPKM.Data);
|
||||
|
||||
private readonly ComboBox[] Moves, Relearn, ValidationRequired, PPUps;
|
||||
private readonly ComboBox[] Moves, Relearn, PPUps;
|
||||
private readonly ValidationRequiredSet[] ValidatedControls;
|
||||
private readonly MaskedTextBox[] MovePP;
|
||||
private readonly PictureBox[] Markings;
|
||||
|
||||
|
@ -176,12 +211,20 @@ namespace PKHeX.WinForms.Controls
|
|||
if (ModifierKeys == (Keys.Control | Keys.Shift | Keys.Alt))
|
||||
return true; // Override
|
||||
|
||||
var cb = Array.Find(ValidationRequired, c => c.BackColor == Draw.InvalidSelection && c.Items.Count != 0);
|
||||
// If any controls are partially filled out, find the first one so we can indicate as such.
|
||||
Control? cb = null;
|
||||
foreach (var type in ValidatedControls)
|
||||
{
|
||||
cb = type.IsNotValid(Entity);
|
||||
if (cb is not null)
|
||||
break;
|
||||
}
|
||||
|
||||
if (cb != null)
|
||||
tabMain.SelectedTab = WinFormsUtil.FindFirstControlOfType<TabPage>(cb);
|
||||
else if (!Stats.Valid)
|
||||
tabMain.SelectedTab = Tab_Stats;
|
||||
else if (WinFormsUtil.GetIndex(CB_Species) == 0)
|
||||
else if (WinFormsUtil.GetIndex(CB_Species) == 0 && !HaX) // can't set an empty slot...
|
||||
tabMain.SelectedTab = Tab_Main;
|
||||
else
|
||||
return true;
|
||||
|
@ -278,7 +321,7 @@ namespace PKHeX.WinForms.Controls
|
|||
Stats.UpdateIVs(this, EventArgs.Empty);
|
||||
UpdatePKRSInfected(this, EventArgs.Empty);
|
||||
UpdatePKRSCured(this, EventArgs.Empty);
|
||||
UpdateNatureModification(CB_StatNature, 1);
|
||||
UpdateNatureModification(CB_StatNature, Entity.StatNature);
|
||||
|
||||
if (HaX) // Load original values from pk not pkm
|
||||
{
|
||||
|
@ -323,8 +366,10 @@ namespace PKHeX.WinForms.Controls
|
|||
img = Resources.hint;
|
||||
else
|
||||
img = null;
|
||||
movePB[i].Visible = true;
|
||||
movePB[i].Image = img;
|
||||
|
||||
var pb = movePB[i];
|
||||
pb.Visible = true;
|
||||
pb.Image = img;
|
||||
}
|
||||
|
||||
if (Entity.Format >= 6)
|
||||
|
@ -677,7 +722,7 @@ namespace PKHeX.WinForms.Controls
|
|||
UpdateLegality();
|
||||
}
|
||||
|
||||
private void ClickGT(object sender, EventArgs e)
|
||||
private void ClickGT(object? sender, EventArgs e)
|
||||
{
|
||||
if (!GB_nOT.Visible)
|
||||
return;
|
||||
|
@ -686,7 +731,7 @@ namespace PKHeX.WinForms.Controls
|
|||
Entity.CurrentHandler = 0;
|
||||
else if (TB_OTt2.Text.Length > 0)
|
||||
Entity.CurrentHandler = 1;
|
||||
UpadteHandlingTrainerBackground(Entity);
|
||||
UpadteHandlingTrainerBackground(Entity.CurrentHandler);
|
||||
|
||||
TB_Friendship.Text = Entity.CurrentFriendship.ToString();
|
||||
}
|
||||
|
@ -701,7 +746,7 @@ namespace PKHeX.WinForms.Controls
|
|||
CB_StatNature.SelectedIndex = CB_Nature.SelectedIndex;
|
||||
}
|
||||
|
||||
private void ClickMoves(object sender, EventArgs e)
|
||||
private void ClickMoves(object? sender, EventArgs e)
|
||||
{
|
||||
UpdateLegality(skipMoveRepop: true);
|
||||
if (sender == GB_CurrentMoves)
|
||||
|
@ -1259,10 +1304,13 @@ namespace PKHeX.WinForms.Controls
|
|||
if (CB_ExtraBytes.Items.Count == 0 || sender is not MaskedTextBox mtb)
|
||||
return;
|
||||
// Changed Extra Byte's Value
|
||||
if (Util.ToInt32(mtb.Text) > byte.MaxValue)
|
||||
var value = Util.ToInt32(mtb.Text);
|
||||
if (value > byte.MaxValue)
|
||||
{
|
||||
mtb.Text = "255";
|
||||
return; // above statement triggers the event again.
|
||||
}
|
||||
|
||||
int value = Util.ToInt32(mtb.Text);
|
||||
int offset = Convert.ToInt32(CB_ExtraBytes.Text, 16);
|
||||
Entity.Data[offset] = (byte)value;
|
||||
}
|
||||
|
@ -1272,13 +1320,13 @@ namespace PKHeX.WinForms.Controls
|
|||
if (CB_ExtraBytes.Items.Count == 0)
|
||||
return;
|
||||
// Byte changed, need to refresh the Text box for the byte's value.
|
||||
TB_ExtraByte.Text = Entity.Data[Convert.ToInt32(CB_ExtraBytes.Text, 16)].ToString();
|
||||
var offset = Convert.ToInt32(CB_ExtraBytes.Text, 16);
|
||||
TB_ExtraByte.Text = Entity.Data[offset].ToString();
|
||||
}
|
||||
|
||||
private void UpdateNatureModification(ComboBox cb, int type)
|
||||
private void UpdateNatureModification(ComboBox cb, int nature)
|
||||
{
|
||||
// 0 = Nature, 1 = Stat Nature
|
||||
string text = Stats.UpdateNatureModification((type == 0) ? Entity.Nature : Entity.StatNature);
|
||||
string text = Stats.UpdateNatureModification(nature);
|
||||
NatureTip.SetToolTip(cb, text);
|
||||
}
|
||||
|
||||
|
@ -1532,7 +1580,7 @@ namespace PKHeX.WinForms.Controls
|
|||
Tip3.SetToolTip(TB_PID, tip);
|
||||
}
|
||||
|
||||
private void Update_ID(object sender, EventArgs e)
|
||||
private void Update_ID(object? sender, EventArgs e)
|
||||
{
|
||||
if (!FieldsLoaded)
|
||||
return;
|
||||
|
@ -1632,14 +1680,14 @@ namespace PKHeX.WinForms.Controls
|
|||
if (Entity.Format <= 4)
|
||||
UpdateRandomPID(sender, e);
|
||||
Entity.Nature = WinFormsUtil.GetIndex(CB_Nature);
|
||||
UpdateNatureModification(CB_Nature, 0);
|
||||
UpdateNatureModification(CB_Nature, Entity.Nature);
|
||||
Stats.UpdateIVs(sender, EventArgs.Empty); // updating Nature will trigger stats to update as well
|
||||
UpdateLegality();
|
||||
}
|
||||
else if (sender == CB_StatNature)
|
||||
{
|
||||
Entity.StatNature = WinFormsUtil.GetIndex(CB_StatNature);
|
||||
UpdateNatureModification(CB_StatNature, 1);
|
||||
UpdateNatureModification(CB_StatNature, Entity.StatNature);
|
||||
Stats.UpdateIVs(sender, EventArgs.Empty); // updating Nature will trigger stats to update as well
|
||||
UpdateLegality();
|
||||
}
|
||||
|
@ -1654,13 +1702,23 @@ namespace PKHeX.WinForms.Controls
|
|||
if (!FieldsLoaded)
|
||||
return;
|
||||
|
||||
ValidateComboBox((ComboBox)sender);
|
||||
if (Moves.Contains(sender)) // Move
|
||||
var cb = (ComboBox) sender;
|
||||
ValidateComboBox(cb);
|
||||
if (Moves.Contains(cb)) // Move
|
||||
UpdatePP(sender, e);
|
||||
|
||||
// Legality
|
||||
Entity.Moves = Moves.Select(WinFormsUtil.GetIndex).ToArray();
|
||||
Entity.RelearnMoves = Relearn.Select(WinFormsUtil.GetIndex).ToArray();
|
||||
// Legality -- set all moves back (why all?)
|
||||
Entity.Move1 = WinFormsUtil.GetIndex(CB_Move1);
|
||||
Entity.Move2 = WinFormsUtil.GetIndex(CB_Move2);
|
||||
Entity.Move3 = WinFormsUtil.GetIndex(CB_Move3);
|
||||
Entity.Move4 = WinFormsUtil.GetIndex(CB_Move4);
|
||||
if (Entity.Format >= 6)
|
||||
{
|
||||
Entity.RelearnMove1 = WinFormsUtil.GetIndex(CB_RelearnMove1);
|
||||
Entity.RelearnMove2 = WinFormsUtil.GetIndex(CB_RelearnMove2);
|
||||
Entity.RelearnMove3 = WinFormsUtil.GetIndex(CB_RelearnMove3);
|
||||
Entity.RelearnMove4 = WinFormsUtil.GetIndex(CB_RelearnMove4);
|
||||
}
|
||||
UpdateLegality(skipMoveRepop: true);
|
||||
}
|
||||
|
||||
|
@ -1672,7 +1730,7 @@ namespace PKHeX.WinForms.Controls
|
|||
var (text, value) = (ComboItem)((ComboBox)sender).Items[e.Index];
|
||||
var valid = LegalMoveSource.CanLearn(value) && !HaX;
|
||||
|
||||
var current = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
|
||||
var current = (e.State & DrawItemState.Selected) != 0;
|
||||
var brush = Draw.Brushes.GetBackground(valid, current);
|
||||
var textColor = Draw.GetText(current);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
else if (showChangelog)
|
||||
{
|
||||
ShowAboutDialog(1);
|
||||
ShowAboutDialog(AboutPage.Changelog);
|
||||
}
|
||||
|
||||
if (BAKprompt && !Directory.Exists(BackupPath))
|
||||
|
@ -355,9 +355,9 @@ namespace PKHeX.WinForms
|
|||
Close();
|
||||
}
|
||||
|
||||
private void MainMenuAbout(object sender, EventArgs e) => ShowAboutDialog(0);
|
||||
private void MainMenuAbout(object sender, EventArgs e) => ShowAboutDialog(AboutPage.Shortcuts);
|
||||
|
||||
private static void ShowAboutDialog(int index = 0)
|
||||
private static void ShowAboutDialog(AboutPage index)
|
||||
{
|
||||
using var form = new About(index);
|
||||
form.ShowDialog();
|
||||
|
@ -409,14 +409,13 @@ namespace PKHeX.WinForms
|
|||
|
||||
private static void ClosePopups()
|
||||
{
|
||||
var forms = Application.OpenForms.OfType<Form>()
|
||||
.Where(z => z is not (Main or SplashScreen or SAV_FolderList))
|
||||
.ToArray();
|
||||
|
||||
var forms = Application.OpenForms.OfType<Form>().Where(IsPopupFormType).ToArray();
|
||||
foreach (var f in forms)
|
||||
f.Close();
|
||||
}
|
||||
|
||||
private static bool IsPopupFormType(Form z) => z is not (Main or SplashScreen or SAV_FolderList);
|
||||
|
||||
private void MainMenuSettings(object sender, EventArgs e)
|
||||
{
|
||||
var settings = Settings;
|
||||
|
@ -687,7 +686,8 @@ namespace PKHeX.WinForms
|
|||
|
||||
private bool OpenPCBoxBin(IEnumerable<byte[]> pkms)
|
||||
{
|
||||
if (!C_SAV.OpenPCBoxBin(pkms.SelectMany(z => z).ToArray(), out string c))
|
||||
var data = pkms.SelectMany(z => z).ToArray();
|
||||
if (!C_SAV.OpenPCBoxBin(data, out string c))
|
||||
{
|
||||
WinFormsUtil.Alert(MsgFileLoadIncompatible, c);
|
||||
return true;
|
||||
|
@ -702,16 +702,21 @@ namespace PKHeX.WinForms
|
|||
if (memCard.SaveGameCount == 1)
|
||||
return memCard.SelectedGameVersion;
|
||||
|
||||
var games = new List<ComboItem>();
|
||||
if (memCard.HasCOLO) games.Add(new ComboItem(MsgGameColosseum, (int)GameVersion.COLO));
|
||||
if (memCard.HasXD) games.Add(new ComboItem(MsgGameXD, (int)GameVersion.XD));
|
||||
if (memCard.HasRSBOX) games.Add(new ComboItem(MsgGameRSBOX, (int)GameVersion.RSBOX));
|
||||
|
||||
var games = GetMemoryCardGameSelectionList(memCard);
|
||||
var dialog = new SAV_GameSelect(games, MsgFileLoadSaveMultiple, MsgFileLoadSaveSelectGame);
|
||||
dialog.ShowDialog();
|
||||
return dialog.Result;
|
||||
}
|
||||
|
||||
private static List<ComboItem> GetMemoryCardGameSelectionList(SAV3GCMemoryCard memCard)
|
||||
{
|
||||
var games = new List<ComboItem>();
|
||||
if (memCard.HasCOLO) games.Add(new ComboItem(MsgGameColosseum, (int) GameVersion.COLO));
|
||||
if (memCard.HasXD) games.Add(new ComboItem(MsgGameXD, (int) GameVersion.XD));
|
||||
if (memCard.HasRSBOX) games.Add(new ComboItem(MsgGameRSBOX, (int) GameVersion.RSBOX));
|
||||
return games;
|
||||
}
|
||||
|
||||
private static bool CheckGCMemoryCard(SAV3GCMemoryCard memCard, string path)
|
||||
{
|
||||
var state = memCard.GetMemoryCardState();
|
||||
|
@ -728,14 +733,14 @@ namespace PKHeX.WinForms
|
|||
return false;
|
||||
|
||||
case GCMemoryCardState.MultipleSaveGame:
|
||||
GameVersion game = SelectMemoryCardSaveGame(memCard);
|
||||
var game = SelectMemoryCardSaveGame(memCard);
|
||||
if (game == GameVersion.Invalid) //Cancel
|
||||
return false;
|
||||
memCard.SelectSaveGame(game);
|
||||
break;
|
||||
|
||||
case GCMemoryCardState.SaveGameCOLO: memCard.SelectSaveGame(GameVersion.COLO); break;
|
||||
case GCMemoryCardState.SaveGameXD: memCard.SelectSaveGame(GameVersion.XD); break;
|
||||
case GCMemoryCardState.SaveGameCOLO: memCard.SelectSaveGame(GameVersion.COLO); break;
|
||||
case GCMemoryCardState.SaveGameXD: memCard.SelectSaveGame(GameVersion.XD); break;
|
||||
case GCMemoryCardState.SaveGameRSBOX: memCard.SelectSaveGame(GameVersion.RSBOX); break;
|
||||
|
||||
default:
|
||||
|
@ -803,7 +808,6 @@ namespace PKHeX.WinForms
|
|||
|
||||
private void ResetSAVPKMEditors(SaveFile sav)
|
||||
{
|
||||
bool WindowToggleRequired = C_SAV.SAV.Generation < 3 && sav.Generation >= 3; // version combobox refresh hack
|
||||
C_SAV.SetEditEnvironment(new SaveDataEditor<PictureBox>(sav, PKME_Tabs));
|
||||
|
||||
var pk = sav.LoadTemplate(TemplatePath);
|
||||
|
@ -826,7 +830,7 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
|
||||
// Initialize Overall Info
|
||||
Menu_LoadBoxes.Enabled = Menu_DumpBoxes.Enabled = Menu_DumpBox.Enabled = Menu_Report.Enabled = C_SAV.SAV!.HasBox;
|
||||
Menu_LoadBoxes.Enabled = Menu_DumpBoxes.Enabled = Menu_DumpBox.Enabled = Menu_Report.Enabled = C_SAV.SAV.HasBox;
|
||||
|
||||
// Initialize Subviews
|
||||
bool WindowTranslationRequired = false;
|
||||
|
@ -836,11 +840,10 @@ namespace PKHeX.WinForms
|
|||
WinFormsUtil.TranslateInterface(this, CurrentLanguage);
|
||||
|
||||
PKME_Tabs.PopulateFields(pk);
|
||||
if (WindowToggleRequired) // Version combobox selectedvalue needs a little help, only updates once it is visible
|
||||
PKME_Tabs.FlickerInterface();
|
||||
|
||||
sav.State.Edited = false;
|
||||
foreach (var p in Plugins)
|
||||
p.NotifySaveLoaded();
|
||||
sav.State.Edited = false;
|
||||
}
|
||||
|
||||
private static string GetProgramTitle()
|
||||
|
|
5
PKHeX.WinForms/Misc/About.Designer.cs
generated
5
PKHeX.WinForms/Misc/About.Designer.cs
generated
|
@ -42,12 +42,12 @@
|
|||
// L_Thanks
|
||||
//
|
||||
this.L_Thanks.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.L_Thanks.AutoSize = true;
|
||||
this.L_Thanks.Location = new System.Drawing.Point(265, 4);
|
||||
this.L_Thanks.Name = "L_Thanks";
|
||||
this.L_Thanks.Size = new System.Drawing.Size(147, 13);
|
||||
this.L_Thanks.Size = new System.Drawing.Size(225, 13);
|
||||
this.L_Thanks.TabIndex = 2;
|
||||
this.L_Thanks.Text = "Thanks to all the researchers!";
|
||||
this.L_Thanks.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// TC_About
|
||||
//
|
||||
|
@ -122,7 +122,6 @@
|
|||
this.Tab_Shortcuts.ResumeLayout(false);
|
||||
this.Tab_Changelog.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -4,13 +4,19 @@ namespace PKHeX.WinForms
|
|||
{
|
||||
public partial class About : Form
|
||||
{
|
||||
public About(int index = 0)
|
||||
public About(AboutPage index = AboutPage.Changelog)
|
||||
{
|
||||
InitializeComponent();
|
||||
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
|
||||
RTB_Changelog.Text = Properties.Resources.changelog;
|
||||
RTB_Shortcuts.Text = Properties.Resources.shortcuts;
|
||||
TC_About.SelectedIndex = index;
|
||||
TC_About.SelectedIndex = (int)index;
|
||||
}
|
||||
}
|
||||
|
||||
public enum AboutPage
|
||||
{
|
||||
Shortcuts,
|
||||
Changelog,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue