PKHeX/PKHeX.WinForms/Misc/QR.cs

91 lines
2.5 KiB
C#
Raw Normal View History

using System;
using System.Drawing;
using System.Windows.Forms;
using PKHeX.Core;
using PKHeX.Drawing.Misc;
using static PKHeX.Core.MessageStrings;
namespace PKHeX.WinForms;
public partial class QR : Form
{
private readonly PKM? Entity;
private readonly Image icon;
private Image qr;
2016-11-17 03:47:41 +00:00
private readonly string[] Lines;
private string extraText = string.Empty;
2016-11-17 03:47:41 +00:00
public QR(Image qr, Image icon, params string[] lines)
{
InitializeComponent();
this.qr = qr;
this.icon = icon;
Lines = lines;
splitContainer1.Panel1Collapsed = true;
RefreshImage();
ResizeWindow();
}
2016-11-17 03:47:41 +00:00
public QR(Image qr, Image icon, PKM pk, params string[] lines)
{
InitializeComponent();
this.qr = qr;
this.icon = icon;
Lines = lines;
2016-11-17 03:47:41 +00:00
Entity = pk;
// Layer on Text
if (pk is PK7 pk7)
this.qr = ReloadQRData(pk7);
else
splitContainer1.Panel1Collapsed = true;
RefreshImage();
ResizeWindow();
splitContainer1.SplitterDistance = 34;
}
private void ResizeWindow()
{
var img = PB_QR.Image;
splitContainer1.Height = splitContainer1.Panel1.Height + img.Height;
splitContainer1.Width = img.Width;
}
2018-05-12 15:13:39 +00:00
private Image ReloadQRData(PK7 pk7)
{
var box = (int)NUD_Box.Value - 1;
var slot = (int)NUD_Slot.Value - 1;
var copies = (int)NUD_Copies.Value;
extraText = $" (Box {box + 1}, Slot {slot + 1}, {copies} cop{(copies > 1 ? "ies" : "y")})";
return QREncode.GenerateQRCode7(pk7, box, slot, copies);
}
private void RefreshImage()
{
SuspendLayout();
ResumeLayout();
Font font = !Main.Unicode ? Font : FontUtil.GetPKXFont(8.25f);
var img = QRImageUtil.GetQRImageExtended(font, qr, icon, Math.Max(qr.Width, 370), qr.Height + 50, Lines, extraText);
PB_QR.Image = img;
}
private void PB_QR_Click(object sender, EventArgs e)
{
if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, MsgQRClipboardImage))
return;
try { Clipboard.SetImage(PB_QR.Image); }
// Clipboard can be locked periodically, just notify on failure.
catch { WinFormsUtil.Alert(MsgQRClipboardFail); }
}
2016-11-17 03:47:41 +00:00
private void UpdateBoxSlotCopies(object sender, EventArgs e)
{
if (Entity is not PK7 pk7)
throw new ArgumentException("Can't update QR7 if pk isn't a PK7!");
qr = ReloadQRData(pk7);
RefreshImage();
}
}