PKHeX/PKHeX.WinForms/Controls/Slots/PokeGrid.cs
Kurt 79a05caff5 Accessibility: narrate pictureboxes
Pipes the Showdown Set description or object detail dump into the accessible property. When the control Enter event is fired, send an Automation notification so that the Narrator narrates what was just tabbed to.

Closes #3758
2023-02-05 00:42:37 -08:00

92 lines
2.7 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 name = $"Pokémon Grid Row {row:00} Column {column:00}";
var x = padEdge + (column * (colWidth + border));
var pb = GetControl(sizeW, sizeH, name);
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, string name) => 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,
AccessibleRole = AccessibleRole.Alert,
Name = name,
AccessibleName = name,
};
}