using System; using System.Collections.Generic; using System.Windows.Forms; using PKHeX.Core; using PKHeX.WinForms.Properties; using static PKHeX.Core.LegalityCheckStrings; namespace PKHeX.WinForms.Controls { public sealed class SummaryPreviewer { private readonly ToolTip ShowSet = new() { InitialDelay = 200, IsBalloon = false, AutoPopDelay = 32_767 }; public void Show(Control pb, PKM pk) { if (pk.Species == 0) { Clear(); return; } var text = ShowdownParsing.GetLocalizedPreviewText(pk, Settings.Default.Language); var la = new LegalityAnalysis(pk); var result = new List{ text, string.Empty }; LegalityFormatting.AddEncounterInfo(la, result); ShowSet.SetToolTip(pb, string.Join(Environment.NewLine, result)); } public void Show(Control pb, IEncounterInfo enc) { if (enc.Species == 0) { Clear(); return; } var lines = new List(); var str = GameInfo.Strings.Species; var name = (uint)enc.Species < str.Count ? str[enc.Species] : enc.Species.ToString(); var EncounterName = $"{(enc is IEncounterable ie ? ie.LongName : "Special")} ({name})"; lines.Add(string.Format(L_FEncounterType_0, EncounterName)); if (enc is MysteryGift mg) lines.Add(mg.CardHeader); var el = enc as ILocation; var loc = el?.GetEncounterLocation(enc.Generation, (int)enc.Version); if (!string.IsNullOrEmpty(loc)) lines.Add(string.Format(L_F0_1, "Location", loc)); lines.Add(string.Format(L_F0_1, nameof(GameVersion), enc.Version)); lines.Add(enc.LevelMin == enc.LevelMax ? $"Level: {enc.LevelMin}" : $"Level: {enc.LevelMin}-{enc.LevelMax}"); #if DEBUG // Record types! Can get a nice summary. // Won't work neatly for Mystery Gift types since those aren't record types. if (enc is not MysteryGift) { // ReSharper disable once ConstantNullCoalescingCondition var raw = enc.ToString() ?? throw new ArgumentNullException(nameof(enc)); lines.AddRange(raw.Split(',', '}', '{')); } #endif var text = string.Join(Environment.NewLine, lines); ShowSet.SetToolTip(pb, text); } public void Clear() => ShowSet.RemoveAll(); } }