PKHeX.Core Nullable cleanup (#2401)
* Handle some nullable cases
Refactor MysteryGift into a second abstract class (backed by a byte array, or fake data)
Make some classes have explicit constructors instead of { } initialization
* Handle bits more obviously without null
* Make SaveFile.BAK explicitly readonly again
* merge constructor methods to have readonly fields
* Inline some properties
* More nullable handling
* Rearrange box actions
define straightforward classes to not have any null properties
* Make extrabyte reference array immutable
* Move tooltip creation to designer
* Rearrange some logic to reduce nesting
* Cache generated fonts
* Split mystery gift album purpose
* Handle more tooltips
* Disallow null setters
* Don't capture RNG object, only type enum
* Unify learnset objects
Now have readonly properties which are never null
don't new() empty learnsets (>800 Learnset objects no longer created,
total of 2400 objects since we also new() a move & level array)
optimize g1/2 reader for early abort case
* Access rewrite
Initialize blocks in a separate object, and get via that object
removes a couple hundred "might be null" warnings since blocks are now readonly getters
some block references have been relocated, but interfaces should expose all that's needed
put HoF6 controls in a groupbox, and disable
* Readonly personal data
* IVs non nullable for mystery gift
* Explicitly initialize forced encounter moves
* Make shadow objects readonly & non-null
Put murkrow fix in binary data resource, instead of on startup
* Assign dex form fetch on constructor
Fixes legality parsing edge cases
also handle cxd parse for valid; exit before exception is thrown in FrameGenerator
* Remove unnecessary null checks
* Keep empty value until init
SetPouch sets the value to an actual one during load, but whatever
* Readonly team lock data
* Readonly locks
Put locked encounters at bottom (favor unlocked)
* Mail readonly data / offset
Rearrange some call flow and pass defaults
Add fake classes for SaveDataEditor mocking
Always party size, no need to check twice in stat editor
use a fake save file as initial data for savedata editor, and for
gamedata (wow i found a usage)
constrain eventwork editor to struct variable types (uint, int, etc),
thus preventing null assignment errors
2019-10-17 01:47:31 +00:00
|
|
|
|
using System.ComponentModel;
|
2017-01-12 01:55:42 +00:00
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace PKHeX.WinForms
|
2015-02-25 04:10:47 +00:00
|
|
|
|
{
|
|
|
|
|
partial class QR
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Required designer variable.
|
|
|
|
|
/// </summary>
|
2017-01-12 01:55:42 +00:00
|
|
|
|
private IContainer components = null;
|
2015-02-25 04:10:47 +00:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Clean up any resources being used.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
|
|
|
protected override void Dispose(bool disposing)
|
|
|
|
|
{
|
|
|
|
|
if (disposing && (components != null))
|
|
|
|
|
{
|
|
|
|
|
components.Dispose();
|
|
|
|
|
}
|
|
|
|
|
base.Dispose(disposing);
|
2020-04-12 20:20:40 +00:00
|
|
|
|
qr.Dispose();
|
2015-02-25 04:10:47 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Windows Form Designer generated code
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Required method for Designer support - do not modify
|
|
|
|
|
/// the contents of this method with the code editor.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void InitializeComponent()
|
|
|
|
|
{
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.PB_QR = new System.Windows.Forms.PictureBox();
|
|
|
|
|
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();
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
2018-07-22 02:20:11 +00:00
|
|
|
|
((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();
|
2019-12-24 04:16:34 +00:00
|
|
|
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
|
|
|
|
this.splitContainer1.Panel1.SuspendLayout();
|
|
|
|
|
this.splitContainer1.Panel2.SuspendLayout();
|
|
|
|
|
this.splitContainer1.SuspendLayout();
|
2015-02-25 04:10:47 +00:00
|
|
|
|
this.SuspendLayout();
|
|
|
|
|
//
|
|
|
|
|
// PB_QR
|
|
|
|
|
//
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.PB_QR.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.PB_QR.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
|
|
|
this.PB_QR.Location = new System.Drawing.Point(0, 0);
|
2015-02-25 04:10:47 +00:00
|
|
|
|
this.PB_QR.Name = "PB_QR";
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.PB_QR.Size = new System.Drawing.Size(284, 176);
|
|
|
|
|
this.PB_QR.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
2015-02-25 04:10:47 +00:00
|
|
|
|
this.PB_QR.TabIndex = 0;
|
|
|
|
|
this.PB_QR.TabStop = false;
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.PB_QR.Click += new System.EventHandler(this.PB_QR_Click);
|
2015-02-25 07:19:00 +00:00
|
|
|
|
//
|
2016-11-17 03:47:41 +00:00
|
|
|
|
// NUD_Box
|
|
|
|
|
//
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.NUD_Box.Location = new System.Drawing.Point(37, 9);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Box.Maximum = new decimal(new int[] {
|
|
|
|
|
32,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Box.Minimum = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Box.Name = "NUD_Box";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.NUD_Box.Size = new System.Drawing.Size(61, 20);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Box.TabIndex = 2;
|
|
|
|
|
this.NUD_Box.Value = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
//
|
|
|
|
|
// label1
|
|
|
|
|
//
|
|
|
|
|
this.label1.AutoSize = true;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.label1.Location = new System.Drawing.Point(3, 11);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label1.Name = "label1";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.label1.Size = new System.Drawing.Size(28, 13);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label1.TabIndex = 3;
|
|
|
|
|
this.label1.Text = "Box:";
|
|
|
|
|
//
|
|
|
|
|
// label2
|
|
|
|
|
//
|
|
|
|
|
this.label2.AutoSize = true;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.label2.Location = new System.Drawing.Point(104, 11);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label2.Name = "label2";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.label2.Size = new System.Drawing.Size(28, 13);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label2.TabIndex = 5;
|
|
|
|
|
this.label2.Text = "Slot:";
|
|
|
|
|
//
|
|
|
|
|
// NUD_Slot
|
|
|
|
|
//
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.NUD_Slot.Location = new System.Drawing.Point(138, 9);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Slot.Maximum = new decimal(new int[] {
|
|
|
|
|
30,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Slot.Minimum = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Slot.Name = "NUD_Slot";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.NUD_Slot.Size = new System.Drawing.Size(61, 20);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Slot.TabIndex = 4;
|
|
|
|
|
this.NUD_Slot.Value = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
//
|
|
|
|
|
// label3
|
|
|
|
|
//
|
|
|
|
|
this.label3.AutoSize = true;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.label3.Location = new System.Drawing.Point(210, 11);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label3.Name = "label3";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.label3.Size = new System.Drawing.Size(42, 13);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.label3.TabIndex = 7;
|
|
|
|
|
this.label3.Text = "Copies:";
|
|
|
|
|
//
|
|
|
|
|
// NUD_Copies
|
|
|
|
|
//
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.NUD_Copies.Location = new System.Drawing.Point(258, 9);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Copies.Maximum = new decimal(new int[] {
|
|
|
|
|
960,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Copies.Minimum = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
this.NUD_Copies.Name = "NUD_Copies";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.NUD_Copies.Size = new System.Drawing.Size(52, 20);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.NUD_Copies.TabIndex = 6;
|
|
|
|
|
this.NUD_Copies.Value = new decimal(new int[] {
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
0});
|
|
|
|
|
//
|
|
|
|
|
// B_Refresh
|
|
|
|
|
//
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.B_Refresh.Location = new System.Drawing.Point(316, 8);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.B_Refresh.Name = "B_Refresh";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.B_Refresh.Size = new System.Drawing.Size(80, 23);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
this.B_Refresh.TabIndex = 8;
|
|
|
|
|
this.B_Refresh.Text = "Refresh";
|
|
|
|
|
this.B_Refresh.UseVisualStyleBackColor = true;
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.B_Refresh.Click += new System.EventHandler(this.UpdateBoxSlotCopies);
|
2016-11-17 03:47:41 +00:00
|
|
|
|
//
|
2019-12-24 04:16:34 +00:00
|
|
|
|
// splitContainer1
|
|
|
|
|
//
|
|
|
|
|
this.splitContainer1.IsSplitterFixed = true;
|
|
|
|
|
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
|
|
|
|
|
this.splitContainer1.Name = "splitContainer1";
|
|
|
|
|
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
|
|
|
|
//
|
|
|
|
|
// splitContainer1.Panel1
|
|
|
|
|
//
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.NUD_Box);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.B_Refresh);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.label1);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.label3);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.NUD_Slot);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.NUD_Copies);
|
|
|
|
|
this.splitContainer1.Panel1.Controls.Add(this.label2);
|
|
|
|
|
this.splitContainer1.Panel1MinSize = 34;
|
|
|
|
|
//
|
|
|
|
|
// splitContainer1.Panel2
|
|
|
|
|
//
|
|
|
|
|
this.splitContainer1.Panel2.Controls.Add(this.PB_QR);
|
|
|
|
|
this.splitContainer1.Size = new System.Drawing.Size(284, 211);
|
|
|
|
|
this.splitContainer1.SplitterDistance = 34;
|
|
|
|
|
this.splitContainer1.SplitterWidth = 1;
|
|
|
|
|
this.splitContainer1.TabIndex = 9;
|
|
|
|
|
//
|
2015-02-25 04:10:47 +00:00
|
|
|
|
// QR
|
|
|
|
|
//
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
|
|
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.AutoSize = true;
|
|
|
|
|
this.ClientSize = new System.Drawing.Size(284, 211);
|
|
|
|
|
this.Controls.Add(this.splitContainer1);
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
2019-10-02 01:12:08 +00:00
|
|
|
|
this.Icon = global::PKHeX.WinForms.Properties.Resources.Icon;
|
2015-02-25 04:10:47 +00:00
|
|
|
|
this.MaximizeBox = false;
|
|
|
|
|
this.MinimizeBox = false;
|
|
|
|
|
this.Name = "QR";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
2017-01-08 23:27:00 +00:00
|
|
|
|
this.Text = "PKHeX QR Code (Click QR to Copy Image)";
|
2018-07-22 02:20:11 +00:00
|
|
|
|
((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();
|
2019-12-24 04:16:34 +00:00
|
|
|
|
this.splitContainer1.Panel1.ResumeLayout(false);
|
|
|
|
|
this.splitContainer1.Panel1.PerformLayout();
|
|
|
|
|
this.splitContainer1.Panel2.ResumeLayout(false);
|
|
|
|
|
this.splitContainer1.Panel2.PerformLayout();
|
|
|
|
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
|
|
|
|
|
this.splitContainer1.ResumeLayout(false);
|
2015-02-25 04:10:47 +00:00
|
|
|
|
this.ResumeLayout(false);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
2017-01-12 01:55:42 +00:00
|
|
|
|
private PictureBox PB_QR;
|
|
|
|
|
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;
|
2019-12-24 04:16:34 +00:00
|
|
|
|
private SplitContainer splitContainer1;
|
2015-02-25 04:10:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|