From 37286326f16557d01be940568da2e2bd049bb225 Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 21 Nov 2018 10:13:23 -0800 Subject: [PATCH] Add personal info table dump Make generic type editor dump out the derived class in the event the array type is a base class --- pkNX.Structures/TableUtil.cs | 23 +++++++++++++++++++ pkNX.WinForms/Subforms/GenericEditor.cs | 2 +- pkNX.WinForms/Subforms/PokeDataUI.Designer.cs | 13 +++++++++++ pkNX.WinForms/Subforms/PokeDataUI.cs | 8 +++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkNX.Structures/TableUtil.cs b/pkNX.Structures/TableUtil.cs index cf72f1e6..d9b0227f 100644 --- a/pkNX.Structures/TableUtil.cs +++ b/pkNX.Structures/TableUtil.cs @@ -16,6 +16,7 @@ public static class TableUtil private const string sep = "\t"; private static IEnumerable GetTableRaw(IEnumerable arr) => Table(arr).Select(row => string.Join(sep, row)); + private static IEnumerable GetTableRaw(IEnumerable arr, Type t) => Table(arr, t).Select(row => string.Join(sep, row)); public static string GetNamedTable(IEnumerable arr, IList names, string name = null) { @@ -31,6 +32,21 @@ public static string GetNamedTable(IEnumerable arr, IList names, s return string.Join(Environment.NewLine, list); } + public static string GetNamedTypeTable(IList arr, IList names, string name = null) + { + var t = arr[0].GetType(); + var list = GetTableRaw(arr, t).ToArray(); + + // slap in name to column header + list[0] = $"Index{sep}{name ?? t.Name}{sep}{list[0]}"; + + // slap in row name to row + for (int i = 1; i < list.Length; i++) + list[i] = $"{i - 1}{sep}{names[i - 1]}{sep}{list[i]}"; + + return string.Join(Environment.NewLine, list); + } + private static IEnumerable> Table(IEnumerable arr) { var type = typeof(T); @@ -39,6 +55,13 @@ private static IEnumerable> Table(IEnumerable arr) yield return GetValues(z, type); } + private static IEnumerable> Table(IEnumerable arr, Type type) + { + yield return GetNames(type); + foreach (var z in arr) + yield return GetValues(z, type); + } + private static IEnumerable GetNames(Type type) { foreach (var z in type.GetProperties()) diff --git a/pkNX.WinForms/Subforms/GenericEditor.cs b/pkNX.WinForms/Subforms/GenericEditor.cs index dc7b4ae9..81c8d74a 100644 --- a/pkNX.WinForms/Subforms/GenericEditor.cs +++ b/pkNX.WinForms/Subforms/GenericEditor.cs @@ -36,7 +36,7 @@ private void B_Save_Click(object sender, EventArgs e) private void B_Dump_Click(object sender, EventArgs e) { var arr = Cache.LoadAll(); - var result = TableUtil.GetNamedTable(arr, Names, Text.Split(' ')[0]); + var result = TableUtil.GetNamedTypeTable(arr, Names, Text.Split(' ')[0]); Clipboard.SetText(result); System.Media.SystemSounds.Asterisk.Play(); } diff --git a/pkNX.WinForms/Subforms/PokeDataUI.Designer.cs b/pkNX.WinForms/Subforms/PokeDataUI.Designer.cs index 2f61aca3..f08d45a9 100644 --- a/pkNX.WinForms/Subforms/PokeDataUI.Designer.cs +++ b/pkNX.WinForms/Subforms/PokeDataUI.Designer.cs @@ -121,6 +121,7 @@ private void InitializeComponent() this.Tab_Extra = new System.Windows.Forms.TabPage(); this.CB_Species = new System.Windows.Forms.ComboBox(); this.PB_MonSprite = new System.Windows.Forms.PictureBox(); + this.B_PDumpTable = new System.Windows.Forms.Button(); this.tabControl1.SuspendLayout(); this.Tab_Personal.SuspendLayout(); this.Tab_Learn.SuspendLayout(); @@ -155,6 +156,7 @@ private void InitializeComponent() // // Tab_Personal // + this.Tab_Personal.Controls.Add(this.B_PDumpTable); this.Tab_Personal.Controls.Add(this.L_GoID); this.Tab_Personal.Controls.Add(this.MT_GoID); this.Tab_Personal.Controls.Add(this.TB_RawColor); @@ -1109,6 +1111,16 @@ private void InitializeComponent() this.PB_MonSprite.TabIndex = 91; this.PB_MonSprite.TabStop = false; // + // B_PDumpTable + // + this.B_PDumpTable.Location = new System.Drawing.Point(451, 492); + this.B_PDumpTable.Name = "B_PDumpTable"; + this.B_PDumpTable.Size = new System.Drawing.Size(75, 23); + this.B_PDumpTable.TabIndex = 502; + this.B_PDumpTable.Text = "Dump Table"; + this.B_PDumpTable.UseVisualStyleBackColor = true; + this.B_PDumpTable.Click += new System.EventHandler(this.B_PDumpTable_Click); + // // PokeDataUI // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1228,5 +1240,6 @@ private void InitializeComponent() private System.Windows.Forms.CheckedListBox CLB_TM; private System.Windows.Forms.PictureBox PB_MonSprite; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button B_PDumpTable; } } \ No newline at end of file diff --git a/pkNX.WinForms/Subforms/PokeDataUI.cs b/pkNX.WinForms/Subforms/PokeDataUI.cs index 108fef3d..33cd96b2 100644 --- a/pkNX.WinForms/Subforms/PokeDataUI.cs +++ b/pkNX.WinForms/Subforms/PokeDataUI.cs @@ -418,6 +418,14 @@ public void SaveMegas() row.SaveEvolution(); } + private void B_PDumpTable_Click(object sender, EventArgs e) + { + var arr = Editor.Personal.Table; + var result = TableUtil.GetNamedTypeTable(arr, entryNames, "Species"); + Clipboard.SetText(result); + System.Media.SystemSounds.Asterisk.Play(); + } + private void B_Save_Click(object sender, EventArgs e) { Modified = true;