mirror of
https://github.com/kwsch/PKHeX
synced 2024-12-12 13:42:36 +00:00
d8b8646de6
Closes #3757 Allows tabbing between windows, or pressing the keyboard's contextmenu key to pop up the context menu without ever needing to use the mouse. changes pkmeditor dragout, box slot displays, sav-mystery gift r/w, and all the encounter/pkm db's
88 lines
2.5 KiB
C#
88 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using PKHeX.Drawing.PokeSprite;
|
|
|
|
namespace PKHeX.WinForms.Controls;
|
|
|
|
public partial class PokeGrid : UserControl
|
|
{
|
|
public PokeGrid()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public readonly List<PictureBox> Entries = new();
|
|
public int Slots { get; private set; }
|
|
|
|
private int sizeW = 68;
|
|
private int sizeH = 56;
|
|
|
|
public bool InitializeGrid(int width, int height, SpriteBuilder info)
|
|
{
|
|
var newCount = width * height;
|
|
if (Slots == newCount)
|
|
{
|
|
if (info.Width == sizeW && info.Height == sizeH)
|
|
return false;
|
|
}
|
|
|
|
sizeW = info.Width;
|
|
sizeH = info.Height;
|
|
Generate(width, height);
|
|
Slots = newCount;
|
|
|
|
return true;
|
|
}
|
|
|
|
private const int padEdge = 1; // edges
|
|
private const int border = 1; // between
|
|
|
|
private void Generate(int width, int height)
|
|
{
|
|
SuspendLayout();
|
|
Controls.Clear();
|
|
foreach (var c in Entries)
|
|
c.Dispose();
|
|
Entries.Clear();
|
|
|
|
int colWidth = sizeW;
|
|
int rowHeight = sizeH;
|
|
|
|
Location = Location with { X = 0 }; // prevent auto-expanding parent if position changes (centered)
|
|
for (int row = 0; row < height; row++)
|
|
{
|
|
var y = padEdge + (row * (rowHeight + border));
|
|
for (int column = 0; column < width; column++)
|
|
{
|
|
var x = padEdge + (column * (colWidth + border));
|
|
var pb = GetControl(sizeW, sizeH);
|
|
pb.Location = new Point(x, y);
|
|
Entries.Add(pb);
|
|
}
|
|
}
|
|
|
|
int w = (2 * padEdge) + border + (width * (colWidth + border));
|
|
int h = (2 * padEdge) + border + (height * (rowHeight + border));
|
|
Size = new Size(w, h);
|
|
Controls.AddRange(Entries.Cast<Control>().ToArray());
|
|
Debug.WriteLine($"{Name} -- Width: {Width}, Height: {Height}");
|
|
ResumeLayout();
|
|
}
|
|
|
|
public void SetBackground(Image img) => BackgroundImage = img;
|
|
|
|
public static SelectablePictureBox GetControl(int width, int height) => new()
|
|
{
|
|
AutoSize = false,
|
|
SizeMode = PictureBoxSizeMode.CenterImage,
|
|
BackColor = SlotUtil.GoodDataColor,
|
|
Width = width + (2 * border),
|
|
Height = height + (2 * border),
|
|
Padding = Padding.Empty,
|
|
Margin = Padding.Empty,
|
|
BorderStyle = BorderStyle.FixedSingle,
|
|
};
|
|
}
|