From db5e084ef99f6a32af0bb7343749088a06f8e12e Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 11 Jan 2017 17:55:42 -0800 Subject: [PATCH] Further refactoring Move System.Drawing usage out of Core to WinForms, as System.Drawing is not in .NET Core/Standard. Simple methods to return resource name strings have been added instead. --- PKHeX.WinForms/MainWindow/Main.cs | 40 +++--- PKHeX.WinForms/Misc/QR.Designer.cs | 122 +++++++++--------- PKHeX.WinForms/Misc/QR.cs | 26 +++- PKHeX.WinForms/PKHeX.WinForms.csproj | 7 + PKHeX.WinForms/Subforms/KChart.cs | 2 +- PKHeX.WinForms/Subforms/SAV_Database.cs | 2 +- .../Save Editors/Gen6/SAV_BoxLayout.cs | 2 +- .../Save Editors/Gen6/SAV_HallOfFame.cs | 6 +- .../Subforms/Save Editors/Gen6/SAV_Trainer.cs | 2 +- .../Subforms/Save Editors/SAV_BoxViewer.cs | 14 +- .../Subforms/Save Editors/SAV_Wondercard.cs | 4 +- PKHeX.WinForms/Subforms/frmReport.cs | 4 +- {PKHeX => PKHeX.WinForms}/Util/ImageUtil.cs | 2 +- {PKHeX => PKHeX.WinForms}/Util/NetUtil.cs | 2 +- PKHeX.WinForms/Util/PKMUtil.cs | 73 +++++++++++ .../Util/QRCoder/AbstractQRCode.cs | 0 .../Util/QRCoder/QRCode.cs | 0 .../Util/QRCoder/QRCodeData.cs | 0 .../Util/QRCoder/QRCodeGenerator.cs | 0 PKHeX/PKHeX.Core.csproj | 6 - PKHeX/PKM/PKM.cs | 1 - PKHeX/PKM/PKX.cs | 52 +------- PKHeX/Saves/Substructures/BoxWallpaper.cs | 8 +- PKHeX/Saves/Substructures/QR7.cs | 25 +--- 24 files changed, 214 insertions(+), 186 deletions(-) rename {PKHeX => PKHeX.WinForms}/Util/ImageUtil.cs (98%) rename {PKHeX => PKHeX.WinForms}/Util/NetUtil.cs (97%) create mode 100644 PKHeX.WinForms/Util/PKMUtil.cs rename {PKHeX => PKHeX.WinForms}/Util/QRCoder/AbstractQRCode.cs (100%) rename {PKHeX => PKHeX.WinForms}/Util/QRCoder/QRCode.cs (100%) rename {PKHeX => PKHeX.WinForms}/Util/QRCoder/QRCodeData.cs (100%) rename {PKHeX => PKHeX.WinForms}/Util/QRCoder/QRCodeGenerator.cs (100%) diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index 2e84217c6..e43edd8aa 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -26,7 +26,7 @@ public Main() L_UpdateAvailable.Click += (sender, e) => Process.Start(ThreadPath); new Thread(() => { - string data = Util.getStringFromURL(VersionPath); + string data = NetUtil.getStringFromURL(VersionPath); if (data == null) return; try @@ -215,7 +215,7 @@ public Main() private static Image colorizedcolor; private static int colorizedslot; public static bool HaX; - private static readonly Image mixedHighlight = Util.ChangeOpacity(Core.Properties.Resources.slotSet, 0.5); + private static readonly Image mixedHighlight = ImageUtil.ChangeOpacity(Core.Properties.Resources.slotSet, 0.5); private static readonly string[] main_langlist = { "日本語", // JPN @@ -1491,7 +1491,7 @@ public void populateFields(PKM pk, bool focus = true) Label_Friendship.Visible = !CHK_IsEgg.Checked && SAV.Generation > 1; // Set the Preview Box - dragout.Image = pk.Sprite; + dragout.Image = pk.Sprite(); setMarkings(); updateLegality(); } @@ -1577,27 +1577,27 @@ private void setMarkings() { PictureBox[] pba = { PB_Mark1, PB_Mark2, PB_Mark3, PB_Mark4, PB_Mark5, PB_Mark6 }; for (int i = 0; i < pba.Length; i++) - pba[i].Image = Util.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] != 0 ? 1 : 0.1); + pba[i].Image = ImageUtil.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] != 0 ? 1 : 0.1); - PB_MarkShiny.Image = Util.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1); - PB_MarkCured.Image = Util.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1); + PB_MarkShiny.Image = ImageUtil.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1); + PB_MarkCured.Image = ImageUtil.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1); - PB_MarkPentagon.Image = Util.ChangeOpacity(PB_MarkPentagon.InitialImage, pkm.Gen6 ? 1 : 0.1); + PB_MarkPentagon.Image = ImageUtil.ChangeOpacity(PB_MarkPentagon.InitialImage, pkm.Gen6 ? 1 : 0.1); // Gen7 Markings if (pkm.Format != 7) return; - PB_MarkAlola.Image = Util.ChangeOpacity(PB_MarkAlola.InitialImage, pkm.Gen7 ? 1 : 0.1); + PB_MarkAlola.Image = ImageUtil.ChangeOpacity(PB_MarkAlola.InitialImage, pkm.Gen7 ? 1 : 0.1); for (int i = 0; i < pba.Length; i++) { switch (pkm.Markings[i]) { case 1: - pba[i].Image = Util.ChangeAllColorTo(pba[i].Image, Color.FromArgb(000, 191, 255)); + pba[i].Image = ImageUtil.ChangeAllColorTo(pba[i].Image, Color.FromArgb(000, 191, 255)); break; case 2: - pba[i].Image = Util.ChangeAllColorTo(pba[i].Image, Color.FromArgb(255, 117, 179)); + pba[i].Image = ImageUtil.ChangeAllColorTo(pba[i].Image, Color.FromArgb(255, 117, 179)); break; } } @@ -1642,7 +1642,7 @@ private void clickQR(object sender, EventArgs e) switch (pkx.Format) { case 7: - qr = QR7.GenerateQRCode7((PK7) pkx); + qr = QR.GenerateQRCode7((PK7) pkx); break; default: qr = QR.getQRImage(ekx, pkx.Format == 6 ? server : "null/#"); @@ -1947,7 +1947,7 @@ private void clickMetLocation(object sender, EventArgs e) private bool changingFields; private void updateBall(object sender, EventArgs e) { - PB_Ball.Image = PKX.getBallSprite(WinFormsUtil.getIndex(CB_Ball)); + PB_Ball.Image = PKMUtil.getBallSprite(WinFormsUtil.getIndex(CB_Ball)); } private void updateEXPLevel(object sender, EventArgs e) { @@ -3622,7 +3622,7 @@ public void setPKXBoxes() { int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex); int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex); - PAN_Box.BackgroundImage = BoxWallpaper.getWallpaper(SAV, boxbgval); + PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval); for (int i = 0; i < 30; i++) { if (i < SAV.BoxSlotCount) @@ -3671,7 +3671,7 @@ public void setPKXBoxes() else { L_SlotOccupied[i].Text = $"{i + 1}: ✘"; - SlotPictureBoxes[i + 42].Image = Util.ChangeOpacity(SlotPictureBoxes[i + 42].Image, 0.6); + SlotPictureBoxes[i + 42].Image = ImageUtil.ChangeOpacity(SlotPictureBoxes[i + 42].Image, 0.6); } } bool? egg = SAV.getDaycareHasEgg(SAV.DaycareIndex); @@ -3736,14 +3736,14 @@ private void getQuickFiller(PictureBox pb, PKM pk = null) if (pb == dragout) mnuLQR.Enabled = pk.Species != 0; // Species - var sprite = pk.Species != 0 ? pk.Sprite : null; + var sprite = pk.Species != 0 ? pk.Sprite() : null; int slot = getSlot(pb); bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot); bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot); if (locked) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); else if (team) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); pb.Image = sprite; if (pb.BackColor == Color.Red) pb.BackColor = Color.Transparent; @@ -3769,14 +3769,14 @@ private void getSlotFiller(int offset, PictureBox pb) } // Something stored in slot. Only display if species is valid. - var sprite = p.Species != 0 ? p.Sprite : null; + var sprite = p.Species != 0 ? p.Sprite() : null; int slot = getSlot(pb); bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot); bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot); if (locked) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); else if (team) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); pb.Image = sprite; pb.BackColor = Color.Transparent; pb.Visible = true; diff --git a/PKHeX.WinForms/Misc/QR.Designer.cs b/PKHeX.WinForms/Misc/QR.Designer.cs index 4909ea0b4..898577ced 100644 --- a/PKHeX.WinForms/Misc/QR.Designer.cs +++ b/PKHeX.WinForms/Misc/QR.Designer.cs @@ -1,11 +1,17 @@ -namespace PKHeX.WinForms +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using PKHeX.Core; + +namespace PKHeX.WinForms { partial class QR { /// /// Required designer variable. /// - private System.ComponentModel.IContainer components = null; + private IContainer components = null; /// /// Clean up any resources being used. @@ -28,47 +34,47 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QR)); - this.PB_QR = new System.Windows.Forms.PictureBox(); - this.FontLabel = new System.Windows.Forms.Label(); - this.NUD_Box = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.NUD_Slot = new System.Windows.Forms.NumericUpDown(); - this.label3 = new System.Windows.Forms.Label(); - this.NUD_Copies = new System.Windows.Forms.NumericUpDown(); - this.B_Refresh = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.PB_QR)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Box)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Slot)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Copies)).BeginInit(); + ComponentResourceManager resources = new ComponentResourceManager(typeof(QR)); + this.PB_QR = new PictureBox(); + this.FontLabel = new Label(); + this.NUD_Box = new NumericUpDown(); + this.label1 = new Label(); + this.label2 = new Label(); + this.NUD_Slot = new NumericUpDown(); + this.label3 = new Label(); + this.NUD_Copies = new NumericUpDown(); + this.B_Refresh = new Button(); + ((ISupportInitialize)(this.PB_QR)).BeginInit(); + ((ISupportInitialize)(this.NUD_Box)).BeginInit(); + ((ISupportInitialize)(this.NUD_Slot)).BeginInit(); + ((ISupportInitialize)(this.NUD_Copies)).BeginInit(); this.SuspendLayout(); // // PB_QR // - this.PB_QR.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PB_QR.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; - this.PB_QR.Location = new System.Drawing.Point(2, 1); + this.PB_QR.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left) + | AnchorStyles.Right))); + this.PB_QR.BackgroundImageLayout = ImageLayout.None; + this.PB_QR.Location = new Point(2, 1); this.PB_QR.Name = "PB_QR"; - this.PB_QR.Size = new System.Drawing.Size(405, 455); + this.PB_QR.Size = new Size(405, 455); this.PB_QR.TabIndex = 0; this.PB_QR.TabStop = false; - this.PB_QR.Click += new System.EventHandler(this.PB_QR_Click); + this.PB_QR.Click += new EventHandler(this.PB_QR_Click); // // FontLabel // this.FontLabel.AutoSize = true; - this.FontLabel.Location = new System.Drawing.Point(388, 393); + this.FontLabel.Location = new Point(388, 393); this.FontLabel.Name = "FontLabel"; - this.FontLabel.Size = new System.Drawing.Size(19, 13); + this.FontLabel.Size = new Size(19, 13); this.FontLabel.TabIndex = 1; this.FontLabel.Text = "<3"; this.FontLabel.Visible = false; // // NUD_Box // - this.NUD_Box.Location = new System.Drawing.Point(38, 465); + this.NUD_Box.Location = new Point(38, 465); this.NUD_Box.Maximum = new decimal(new int[] { 32, 0, @@ -80,7 +86,7 @@ private void InitializeComponent() 0, 0}); this.NUD_Box.Name = "NUD_Box"; - this.NUD_Box.Size = new System.Drawing.Size(61, 20); + this.NUD_Box.Size = new Size(61, 20); this.NUD_Box.TabIndex = 2; this.NUD_Box.Value = new decimal(new int[] { 1, @@ -91,24 +97,24 @@ private void InitializeComponent() // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(4, 467); + this.label1.Location = new Point(4, 467); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(28, 13); + this.label1.Size = new Size(28, 13); this.label1.TabIndex = 3; this.label1.Text = "Box:"; // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(105, 467); + this.label2.Location = new Point(105, 467); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(28, 13); + this.label2.Size = new Size(28, 13); this.label2.TabIndex = 5; this.label2.Text = "Slot:"; // // NUD_Slot // - this.NUD_Slot.Location = new System.Drawing.Point(139, 465); + this.NUD_Slot.Location = new Point(139, 465); this.NUD_Slot.Maximum = new decimal(new int[] { 30, 0, @@ -120,7 +126,7 @@ private void InitializeComponent() 0, 0}); this.NUD_Slot.Name = "NUD_Slot"; - this.NUD_Slot.Size = new System.Drawing.Size(61, 20); + this.NUD_Slot.Size = new Size(61, 20); this.NUD_Slot.TabIndex = 4; this.NUD_Slot.Value = new decimal(new int[] { 1, @@ -131,15 +137,15 @@ private void InitializeComponent() // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(211, 467); + this.label3.Location = new Point(211, 467); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(42, 13); + this.label3.Size = new Size(42, 13); this.label3.TabIndex = 7; this.label3.Text = "Copies:"; // // NUD_Copies // - this.NUD_Copies.Location = new System.Drawing.Point(259, 465); + this.NUD_Copies.Location = new Point(259, 465); this.NUD_Copies.Maximum = new decimal(new int[] { 960, 0, @@ -151,7 +157,7 @@ private void InitializeComponent() 0, 0}); this.NUD_Copies.Name = "NUD_Copies"; - this.NUD_Copies.Size = new System.Drawing.Size(52, 20); + this.NUD_Copies.Size = new Size(52, 20); this.NUD_Copies.TabIndex = 6; this.NUD_Copies.Value = new decimal(new int[] { 1, @@ -161,19 +167,19 @@ private void InitializeComponent() // // B_Refresh // - this.B_Refresh.Location = new System.Drawing.Point(317, 464); + this.B_Refresh.Location = new Point(317, 464); this.B_Refresh.Name = "B_Refresh"; - this.B_Refresh.Size = new System.Drawing.Size(80, 23); + this.B_Refresh.Size = new Size(80, 23); this.B_Refresh.TabIndex = 8; this.B_Refresh.Text = "Refresh"; this.B_Refresh.UseVisualStyleBackColor = true; - this.B_Refresh.Click += new System.EventHandler(this.updateBoxSlotCopies); + this.B_Refresh.Click += new EventHandler(this.updateBoxSlotCopies); // // QR // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(409, 407); + this.AutoScaleDimensions = new SizeF(6F, 13F); + this.AutoScaleMode = AutoScaleMode.Font; + this.ClientSize = new Size(409, 407); this.Controls.Add(this.B_Refresh); this.Controls.Add(this.label3); this.Controls.Add(this.NUD_Copies); @@ -183,17 +189,17 @@ private void InitializeComponent() this.Controls.Add(this.NUD_Box); this.Controls.Add(this.FontLabel); this.Controls.Add(this.PB_QR); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.FormBorderStyle = FormBorderStyle.FixedSingle; + this.Icon = ((Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "QR"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.StartPosition = FormStartPosition.CenterParent; this.Text = "PKHeX QR Code (Click QR to Copy Image)"; - ((System.ComponentModel.ISupportInitialize)(this.PB_QR)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Box)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Slot)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_Copies)).EndInit(); + ((ISupportInitialize)(this.PB_QR)).EndInit(); + ((ISupportInitialize)(this.NUD_Box)).EndInit(); + ((ISupportInitialize)(this.NUD_Slot)).EndInit(); + ((ISupportInitialize)(this.NUD_Copies)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -201,14 +207,14 @@ private void InitializeComponent() #endregion - private System.Windows.Forms.PictureBox PB_QR; - private System.Windows.Forms.Label FontLabel; - private System.Windows.Forms.NumericUpDown NUD_Box; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.NumericUpDown NUD_Slot; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.NumericUpDown NUD_Copies; - private System.Windows.Forms.Button B_Refresh; + private PictureBox PB_QR; + private Label FontLabel; + private NumericUpDown NUD_Box; + private Label label1; + private Label label2; + private NumericUpDown NUD_Slot; + private Label label3; + private NumericUpDown NUD_Copies; + private Button B_Refresh; } } \ No newline at end of file diff --git a/PKHeX.WinForms/Misc/QR.cs b/PKHeX.WinForms/Misc/QR.cs index 6424efb62..a6abc9225 100644 --- a/PKHeX.WinForms/Misc/QR.cs +++ b/PKHeX.WinForms/Misc/QR.cs @@ -6,6 +6,7 @@ using System.Web; using System.Windows.Forms; using PKHeX.Core; +using QRCoder; namespace PKHeX.WinForms { @@ -56,7 +57,7 @@ private void RefreshImage() gfx.DrawImage(icon, preview.Width / 2 - icon.Width / 2, preview.Height / 2 - icon.Height / 2); } // Layer on Preview Image - Image pic = Util.LayerImage(qr, preview, qr.Width / 2 - preview.Width / 2, qr.Height / 2 - preview.Height / 2, 1); + Image pic = ImageUtil.LayerImage(qr, preview, qr.Width / 2 - preview.Width / 2, qr.Height / 2 - preview.Height / 2, 1); Image newpic = new Bitmap(PB_QR.Width, PB_QR.Height); using (Graphics g = Graphics.FromImage(newpic)) @@ -91,7 +92,7 @@ internal static byte[] getQRData() string webURL = "http://api.qrserver.com/v1/read-qr-code/?fileurl=" + HttpUtility.UrlEncode(address); try { - string data = Util.getStringFromURL(webURL); + string data = NetUtil.getStringFromURL(webURL); if (data.Contains("could not find")) { WinFormsUtil.Alert("Reader could not find QR data in the image."); return null; } if (data.Contains("filetype not supported")) { WinFormsUtil.Alert("Input URL is not valid. Double check that it is an image (jpg/png).", address); return null; } // Quickly convert the json response to a data string @@ -131,7 +132,7 @@ internal static Image getQRImage(byte[] data, string server) try { - return Util.getImageFromURL(webURL); + return NetUtil.getImageFromURL(webURL); } catch { @@ -150,12 +151,29 @@ private void updateBoxSlotCopies(object sender, EventArgs e) var box = (int) NUD_Box.Value - 1; var slot = (int) NUD_Slot.Value - 1; var copies = (int) NUD_Copies.Value; - var new_qr = QR7.GenerateQRCode7((PK7)pkm, box, slot, copies); + var new_qr = GenerateQRCode7((PK7)pkm, box, slot, copies); qr = new_qr; SuspendLayout(); extraText = $" (Box {box+1}, Slot {slot+1}, {copies} cop{(copies > 1 ? "ies" : "y")})"; RefreshImage(); ResumeLayout(); } + + // QR7 Utility + public static Image GenerateQRCode7(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1) + { + byte[] data = QR7.GenerateQRData(pk7, box, slot, num_copies); + using (var generator = new QRCodeGenerator()) + using (var qr_data = generator.CreateQRCode(data)) + using (var qr_code = new QRCode(qr_data)) + return qr_code.GetGraphic(4); + } + public static Image GenerateQRCode(byte[] data, int ppm = 4) + { + using (var generator = new QRCodeGenerator()) + using (var qr_data = generator.CreateQRCode(data)) + using (var qr_code = new QRCode(qr_data)) + return qr_code.GetGraphic(ppm); + } } } \ No newline at end of file diff --git a/PKHeX.WinForms/PKHeX.WinForms.csproj b/PKHeX.WinForms/PKHeX.WinForms.csproj index f65d6b939..df1b220d6 100644 --- a/PKHeX.WinForms/PKHeX.WinForms.csproj +++ b/PKHeX.WinForms/PKHeX.WinForms.csproj @@ -337,6 +337,13 @@ + + + + + + + Main.cs diff --git a/PKHeX.WinForms/Subforms/KChart.cs b/PKHeX.WinForms/Subforms/KChart.cs index 694583ad8..a637e81d7 100644 --- a/PKHeX.WinForms/Subforms/KChart.cs +++ b/PKHeX.WinForms/Subforms/KChart.cs @@ -48,7 +48,7 @@ private void popEntry(int index) int r = 0; row.Cells[r++].Value = s.ToString("000") + (f > 0 ? "-"+f.ToString("00") :""); - row.Cells[r++].Value = PKX.getSprite(s, f, 0, 0, false, false, Main.SAV.Generation); + row.Cells[r++].Value = PKMUtil.getSprite(s, f, 0, 0, false, false, Main.SAV.Generation); row.Cells[r++].Value = species[index]; row.Cells[r++].Value = s > 721 || Legal.PastGenAlolanNatives.Contains(s); row.Cells[r].Style.BackColor = mapColor((int)((p.BST - 175) / 3f)); diff --git a/PKHeX.WinForms/Subforms/SAV_Database.cs b/PKHeX.WinForms/Subforms/SAV_Database.cs index d0d01663c..36aa353f8 100644 --- a/PKHeX.WinForms/Subforms/SAV_Database.cs +++ b/PKHeX.WinForms/Subforms/SAV_Database.cs @@ -551,7 +551,7 @@ private void FillPKXBoxes(int start) } PKM[] data = Results.Skip(start * RES_MIN).Take(RES_MAX).ToArray(); for (int i = 0; i < data.Length; i++) - PKXBOXES[i].Image = data[i].Sprite; + PKXBOXES[i].Image = data[i].Sprite(); for (int i = data.Length; i < RES_MAX; i++) PKXBOXES[i].Image = null; diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs index 37fcf349c..d9aa1a655 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_BoxLayout.cs @@ -125,7 +125,7 @@ private void changeBoxBG(object sender, EventArgs e) if (!editing) SAV.setBoxWallpaper(LB_BoxSelect.SelectedIndex, CB_BG.SelectedIndex); - PAN_BG.BackgroundImage = BoxWallpaper.getWallpaper(SAV, CB_BG.SelectedIndex); + PAN_BG.BackgroundImage = SAV.getWallpaper(CB_BG.SelectedIndex); } private bool MoveItem(int direction) diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs index 1d5aa1fca..fce7c4748 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_HallOfFame.cs @@ -229,7 +229,7 @@ private void NUP_PartyIndex_ValueChanged(object sender, EventArgs e) CB_Form.SelectedIndex = (int)form; setGenderLabel((int)gender); updateNickname(sender, e); - bpkx.Image = PKX.getSprite(species, (int)form, (int)gender, item, false, shiny == 1); + bpkx.Image = PKMUtil.getSprite(species, (int)form, (int)gender, item, false, shiny == 1); editing = true; } private void Write_Entry(object sender, EventArgs e) @@ -290,7 +290,7 @@ private void Write_Entry(object sender, EventArgs e) vnd |= rawvnd & 0x80000000; Array.Copy(BitConverter.GetBytes(vnd), 0, data, offset + 0x1B0, 4); - bpkx.Image = PKX.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked); + bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked); displayEntry(null, null); // refresh text view } private void Validate_TextBoxes() @@ -339,7 +339,7 @@ private void updateShiny(object sender, EventArgs e) { if (!editing) return; //Don't do writing until loaded - bpkx.Image = PKX.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked); + bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked); Write_Entry(null, null); } diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs index eed7ea650..0e7045d4d 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs @@ -361,7 +361,7 @@ private void getBadges() }; for (int i = 0; i < 8; i++) - pba[i].Image = Util.ChangeOpacity(bma[i], cba[i].Checked ? 1 : 0.1); + pba[i].Image = ImageUtil.ChangeOpacity(bma[i], cba[i].Checked ? 1 : 0.1); } private void getTextBoxes() { diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs index 51bfcbb9c..f466cdd39 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs @@ -90,7 +90,7 @@ public void setPKXBoxes() { int boxoffset = SAV.getBoxOffset(CB_BoxSelect.SelectedIndex); int boxbgval = SAV.getBoxWallpaper(CB_BoxSelect.SelectedIndex); - PAN_Box.BackgroundImage = BoxWallpaper.getWallpaper(SAV, boxbgval); + PAN_Box.BackgroundImage = SAV.getWallpaper(boxbgval); for (int i = 0; i < SAV.BoxSlotCount; i++) getSlotFiller(boxoffset + SAV.SIZE_STORED*i, SlotPictureBoxes[i]); @@ -113,27 +113,27 @@ private void getSlotFiller(int offset, PictureBox pb) return; } // Something stored in slot. Only display if species is valid. - var sprite = p.Species != 0 ? p.Sprite : null; + var sprite = p.Species != 0 ? p.Sprite() : null; int slot = getSlot(pb); bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot); bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot); if (locked) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); else if (team) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); pb.Image = sprite; pb.BackColor = Color.Transparent; } private void getQuickFiller(PictureBox pb, PKM pk) { - var sprite = pk.Species != 0 ? pk.Sprite : null; + var sprite = pk.Species != 0 ? pk.Sprite() : null; int slot = getSlot(pb); bool locked = slot < 30 && SAV.getIsSlotLocked(CB_BoxSelect.SelectedIndex, slot); bool team = slot < 30 && SAV.getIsTeamSet(CB_BoxSelect.SelectedIndex, slot); if (locked) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.locked, 26, 0, 1); else if (team) - sprite = Util.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); + sprite = ImageUtil.LayerImage(sprite, Core.Properties.Resources.team, 21, 0, 1); pb.Image = sprite; if (pb.BackColor == Color.Red) pb.BackColor = Color.Transparent; diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs index 5e3cf6378..d5e8b28a9 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_Wondercard.cs @@ -473,14 +473,14 @@ internal static Image getSprite(MysteryGift gift) { Image img; if (gift.IsPokémon) - img = PKX.getSprite(gift.convertToPKM(Main.SAV)); + img = PKMUtil.getSprite(gift.convertToPKM(Main.SAV)); else if (gift.IsItem) img = (Image)(Core.Properties.Resources.ResourceManager.GetObject("item_" + gift.Item) ?? Core.Properties.Resources.unknown); else img = Core.Properties.Resources.unknown; if (gift.GiftUsed) - img = Util.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3); + img = ImageUtil.LayerImage(new Bitmap(img.Width, img.Height), img, 0, 0, 0.3); return img; } private static string getDescription(MysteryGift gift) diff --git a/PKHeX.WinForms/Subforms/frmReport.cs b/PKHeX.WinForms/Subforms/frmReport.cs index 90aff7524..0f2ef7709 100644 --- a/PKHeX.WinForms/Subforms/frmReport.cs +++ b/PKHeX.WinForms/Subforms/frmReport.cs @@ -18,7 +18,7 @@ public class Preview { private readonly PKM pkm; public string Position => pkm.Identifier; - public Image Sprite => pkm.Sprite; + public Image Sprite => pkm.Sprite(); public string Nickname => pkm.Nickname; public string Species => GameInfo.Strings.specieslist[pkm.Species]; public string Nature => GameInfo.Strings.natures[pkm.Nature]; @@ -183,7 +183,7 @@ public void PopulateData(PKM[] Data) } private void dgData_Sorted(object sender, EventArgs e) { - int height = PKX.getSprite(1, 0, 0, 0, false, false).Height + 1; // dummy sprite, max height of a row + int height = PKMUtil.getSprite(1, 0, 0, 0, false, false).Height + 1; // dummy sprite, max height of a row for (int i = 0; i < dgData.Rows.Count; i++) dgData.Rows[i].Height = height; } diff --git a/PKHeX/Util/ImageUtil.cs b/PKHeX.WinForms/Util/ImageUtil.cs similarity index 98% rename from PKHeX/Util/ImageUtil.cs rename to PKHeX.WinForms/Util/ImageUtil.cs index febc12d91..dc2a99181 100644 --- a/PKHeX/Util/ImageUtil.cs +++ b/PKHeX.WinForms/Util/ImageUtil.cs @@ -5,7 +5,7 @@ namespace PKHeX.Core { - public static partial class Util + public static class ImageUtil { // Image Layering/Blending Utility public static Bitmap LayerImage(Image baseLayer, Image overLayer, int x, int y, double trans) diff --git a/PKHeX/Util/NetUtil.cs b/PKHeX.WinForms/Util/NetUtil.cs similarity index 97% rename from PKHeX/Util/NetUtil.cs rename to PKHeX.WinForms/Util/NetUtil.cs index 926880b8e..fce665ca4 100644 --- a/PKHeX/Util/NetUtil.cs +++ b/PKHeX.WinForms/Util/NetUtil.cs @@ -5,7 +5,7 @@ namespace PKHeX.Core { - public partial class Util + public class NetUtil { public static string getStringFromURL(string webURL) { diff --git a/PKHeX.WinForms/Util/PKMUtil.cs b/PKHeX.WinForms/Util/PKMUtil.cs new file mode 100644 index 000000000..115624946 --- /dev/null +++ b/PKHeX.WinForms/Util/PKMUtil.cs @@ -0,0 +1,73 @@ +using System.Drawing; +using PKHeX.Core; +using PKHeX.Core.Properties; + +namespace PKHeX.WinForms +{ + public static class PKMUtil + { + public static Image getBallSprite(int ball) + { + string str = PKX.getBallString(ball); + return (Image)Resources.ResourceManager.GetObject(str) ?? Resources._ball4; // Poké Ball (default) + } + public static Image Sprite(this PKM pkm) + { + return getSprite(pkm); + } + public static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1) + { + if (species == 0) + return (Image)Resources.ResourceManager.GetObject("_0"); + + string file = PKX.getSpriteString(species, form, gender, generation); + + // Redrawing logic + Image baseImage = (Image)Resources.ResourceManager.GetObject(file); + if (baseImage == null) + { + if (species < 803) + { + baseImage = ImageUtil.LayerImage( + (Image)Resources.ResourceManager.GetObject("_" + species), + Resources.unknown, + 0, 0, .5); + } + else + baseImage = Resources.unknown; + } + if (isegg) + { + // Start with a partially transparent species by layering the species with partial opacity onto a blank image. + baseImage = ImageUtil.LayerImage((Image)Resources.ResourceManager.GetObject("_0"), baseImage, 0, 0, 0.33); + // Add the egg layer over-top with full opacity. + baseImage = ImageUtil.LayerImage(baseImage, (Image)Resources.ResourceManager.GetObject("egg"), 0, 0, 1); + } + if (shiny) + { + // Add shiny star to top left of image. + baseImage = ImageUtil.LayerImage(baseImage, Resources.rare_icon, 0, 0, 0.7); + } + if (item > 0) + { + Image itemimg = (Image)Resources.ResourceManager.GetObject("item_" + item) ?? Resources.helditem; + if (generation >= 2 && generation <= 4 && 328 <= item && item <= 419) // gen2/3/4 TM + itemimg = Resources.item_tm; + + // Redraw + baseImage = ImageUtil.LayerImage(baseImage, itemimg, 22 + (15 - itemimg.Width) / 2, 15 + (15 - itemimg.Height), 1); + } + return baseImage; + } + public static Image getSprite(PKM pkm) + { + return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format); + } + + public static Image getWallpaper(this SaveFile SAV, int box) + { + string s = BoxWallpaper.getWallpaper(SAV, box); + return (Bitmap)(Resources.ResourceManager.GetObject(s) ?? Resources.box_wp16xy); + } + } +} diff --git a/PKHeX/Util/QRCoder/AbstractQRCode.cs b/PKHeX.WinForms/Util/QRCoder/AbstractQRCode.cs similarity index 100% rename from PKHeX/Util/QRCoder/AbstractQRCode.cs rename to PKHeX.WinForms/Util/QRCoder/AbstractQRCode.cs diff --git a/PKHeX/Util/QRCoder/QRCode.cs b/PKHeX.WinForms/Util/QRCoder/QRCode.cs similarity index 100% rename from PKHeX/Util/QRCoder/QRCode.cs rename to PKHeX.WinForms/Util/QRCoder/QRCode.cs diff --git a/PKHeX/Util/QRCoder/QRCodeData.cs b/PKHeX.WinForms/Util/QRCoder/QRCodeData.cs similarity index 100% rename from PKHeX/Util/QRCoder/QRCodeData.cs rename to PKHeX.WinForms/Util/QRCoder/QRCodeData.cs diff --git a/PKHeX/Util/QRCoder/QRCodeGenerator.cs b/PKHeX.WinForms/Util/QRCoder/QRCodeGenerator.cs similarity index 100% rename from PKHeX/Util/QRCoder/QRCodeGenerator.cs rename to PKHeX.WinForms/Util/QRCoder/QRCodeGenerator.cs diff --git a/PKHeX/PKHeX.Core.csproj b/PKHeX/PKHeX.Core.csproj index b63f78184..3ee6bd901 100644 --- a/PKHeX/PKHeX.Core.csproj +++ b/PKHeX/PKHeX.Core.csproj @@ -193,13 +193,7 @@ - - - - - - diff --git a/PKHeX/PKM/PKM.cs b/PKHeX/PKM/PKM.cs index b1f8fef7b..6923f2137 100644 --- a/PKHeX/PKM/PKM.cs +++ b/PKHeX/PKM/PKM.cs @@ -294,7 +294,6 @@ public int GenNumber public int MarkHeart { get { return Markings[3]; } set { var marks = Markings; marks[3] = value; Markings = marks; } } public int MarkStar { get { return Markings[4]; } set { var marks = Markings; marks[4] = value; Markings = marks; } } public int MarkDiamond { get { return Markings[5]; } set { var marks = Markings; marks[5] = value; Markings = marks; } } - public Image Sprite => PKX.getSprite(this); public string ShowdownText => ShowdownSet.getShowdownText(this); public string[] QRText => PKX.getQRText(this); diff --git a/PKHeX/PKM/PKX.cs b/PKHeX/PKM/PKX.cs index 21e70306d..e81389dc4 100644 --- a/PKHeX/PKM/PKX.cs +++ b/PKHeX/PKM/PKX.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.Linq; using System.Text; -using PKHeX.Core.Properties; namespace PKHeX.Core { @@ -510,14 +508,9 @@ public static uint getRandomPID(int species, int cg, int origin, int nature, int } // Data Requests - public static Image getBallSprite(int ball) + public static string getBallString(int ball) => "_ball" + ball; + public static string getSpriteString(int species, int form, int gender, int generation) { - return (Image)Resources.ResourceManager.GetObject("_ball" + ball) ?? Resources._ball4; // Poké Ball (default) - } - public static Image getSprite(int species, int form, int gender, int item, bool isegg, bool shiny, int generation = -1) - { - if (species == 0) - return (Image)Resources.ResourceManager.GetObject("_0"); if (new[] { 778, 664, 665, 414, 493, 773 }.Contains(species)) // Species who show their default sprite regardless of Form form = 0; @@ -530,46 +523,7 @@ public static Image getSprite(int species, int form, int gender, int item, bool if (species == 25 && form > 0 && generation >= 7) // Pikachu file += "c"; // Cap - // Redrawing logic - Image baseImage = (Image)Resources.ResourceManager.GetObject(file); - if (baseImage == null) - { - if (species < 803) - { - baseImage = Util.LayerImage( - (Image)Resources.ResourceManager.GetObject("_" + species), - Resources.unknown, - 0, 0, .5); - } - else - baseImage = Resources.unknown; - } - if (isegg) - { - // Start with a partially transparent species by layering the species with partial opacity onto a blank image. - baseImage = Util.LayerImage((Image)Resources.ResourceManager.GetObject("_0"), baseImage, 0, 0, 0.33); - // Add the egg layer over-top with full opacity. - baseImage = Util.LayerImage(baseImage, (Image)Resources.ResourceManager.GetObject("egg"), 0, 0, 1); - } - if (shiny) - { - // Add shiny star to top left of image. - baseImage = Util.LayerImage(baseImage, Resources.rare_icon, 0, 0, 0.7); - } - if (item > 0) - { - Image itemimg = (Image)Resources.ResourceManager.GetObject("item_" + item) ?? Resources.helditem; - if (generation >= 2 && generation <= 4 && 328 <= item && item <= 419) // gen2/3/4 TM - itemimg = Resources.item_tm; - - // Redraw - baseImage = Util.LayerImage(baseImage, itemimg, 22 + (15 - itemimg.Width) / 2, 15 + (15 - itemimg.Height), 1); - } - return baseImage; - } - public static Image getSprite(PKM pkm) - { - return getSprite(pkm.Species, pkm.AltForm, pkm.Gender, pkm.SpriteItem, pkm.IsEgg, pkm.IsShiny, pkm.Format); + return file; } // Personal.dat diff --git a/PKHeX/Saves/Substructures/BoxWallpaper.cs b/PKHeX/Saves/Substructures/BoxWallpaper.cs index 25a6e5aae..fe4f79b36 100644 --- a/PKHeX/Saves/Substructures/BoxWallpaper.cs +++ b/PKHeX/Saves/Substructures/BoxWallpaper.cs @@ -1,10 +1,8 @@ -using System.Drawing; - -namespace PKHeX.Core +namespace PKHeX.Core { public static class BoxWallpaper { - public static Bitmap getWallpaper(SaveFile SAV, int index) + public static string getWallpaper(SaveFile SAV, int index) { index++; string s = "box_wp" + index.ToString("00"); @@ -33,7 +31,7 @@ public static Bitmap getWallpaper(SaveFile SAV, int index) s += "rs"; break; } - return (Bitmap)(Properties.Resources.ResourceManager.GetObject(s) ?? Properties.Resources.box_wp16xy); + return s; } } } diff --git a/PKHeX/Saves/Substructures/QR7.cs b/PKHeX/Saves/Substructures/QR7.cs index 2cc26d3a1..955d86ca4 100644 --- a/PKHeX/Saves/Substructures/QR7.cs +++ b/PKHeX/Saves/Substructures/QR7.cs @@ -1,9 +1,6 @@ using System; -using System.Drawing; using System.Linq; -using QRCoder; - namespace PKHeX.Core { // anatomy of a QR7: @@ -17,8 +14,7 @@ namespace PKHeX.Core // u8 dex_data[0x60]; // u16 crc16 // sizeof(QR7) == 0x1A2 - - + public static class QR7 { private static bool hasGenderDifferences(int species) @@ -62,7 +58,7 @@ private static byte[] GetRawQR(int species, int formnum, bool shiny, int gender) } return basedata; } - private static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1) + public static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1) { if (box > 31) box = 31; @@ -87,22 +83,5 @@ private static byte[] GenerateQRData(PK7 pk7, int box = 0, int slot = 0, int num BitConverter.GetBytes((ushort) SaveUtil.check16(data.Take(0x1A0).ToArray(), 0)).CopyTo(data, 0x1A0); return data; } - - public static Bitmap GenerateQRCode7(PK7 pk7, int box = 0, int slot = 0, int num_copies = 1) - { - byte[] data = GenerateQRData(pk7, box, slot, num_copies); - using (var generator = new QRCodeGenerator()) - using (var qr_data = generator.CreateQRCode(data)) - using (var qr_code = new QRCode(qr_data)) - return qr_code.GetGraphic(4); - } - - public static Bitmap GenerateQRCode(byte[] data, int ppm = 4) - { - using (var generator = new QRCodeGenerator()) - using (var qr_data = generator.CreateQRCode(data)) - using (var qr_code = new QRCode(qr_data)) - return qr_code.GetGraphic(ppm); - } } }