mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-05-26 01:27:36 -05:00
Handle all warnings obviously the usage of null! could potentially be avoided if the object init wasn't such garbage, but here we are with years of old junk and lack of abstraction in the GUI project
137 lines
4.7 KiB
C#
137 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using PKHeX.Core;
|
|
using PKHeX.Drawing;
|
|
|
|
namespace PKHeX.WinForms.Controls
|
|
{
|
|
public partial class PartyEditor : UserControl, ISlotViewer<PictureBox>
|
|
{
|
|
public IList<PictureBox> SlotPictureBoxes { get; private set; } = Array.Empty<PictureBox>();
|
|
public SaveFile SAV => M?.SE.SAV ?? throw new ArgumentNullException(nameof(SAV));
|
|
|
|
public int BoxSlotCount { get; private set; }
|
|
public SlotChangeManager? M { get; set; }
|
|
public bool FlagIllegal { get; set; }
|
|
|
|
public PartyEditor()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
internal bool InitializeGrid()
|
|
{
|
|
const int width = 2;
|
|
const int height = 3;
|
|
if (PartyPokeGrid.InitializeGrid(width, height, SpriteUtil.Spriter))
|
|
{
|
|
PartyPokeGrid.HorizontallyCenter(this);
|
|
InitializeSlots();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void InitializeSlots()
|
|
{
|
|
SlotPictureBoxes = PartyPokeGrid.Entries;
|
|
BoxSlotCount = SlotPictureBoxes.Count;
|
|
foreach (var pb in SlotPictureBoxes)
|
|
{
|
|
pb.MouseEnter += (o, args) => BoxSlot_MouseEnter(pb, args);
|
|
pb.MouseLeave += (o, args) => BoxSlot_MouseLeave(pb, args);
|
|
pb.MouseClick += BoxSlot_MouseClick;
|
|
pb.MouseMove += BoxSlot_MouseMove;
|
|
pb.MouseDown += BoxSlot_MouseDown;
|
|
pb.MouseUp += BoxSlot_MouseUp;
|
|
|
|
pb.DragEnter += BoxSlot_DragEnter;
|
|
pb.DragDrop += BoxSlot_DragDrop;
|
|
pb.QueryContinueDrag += BoxSlot_QueryContinueDrag;
|
|
pb.GiveFeedback += (sender, e) => e.UseDefaultCursors = false;
|
|
pb.AllowDrop = true;
|
|
}
|
|
}
|
|
|
|
public void NotifySlotOld(ISlotInfo previous)
|
|
{
|
|
if (!(previous is SlotInfoParty p))
|
|
return;
|
|
|
|
var pb = SlotPictureBoxes[p.Slot];
|
|
pb.BackgroundImage = null;
|
|
}
|
|
|
|
public void NotifySlotChanged(ISlotInfo slot, SlotTouchType type, PKM pkm)
|
|
{
|
|
int index = GetViewIndex(slot);
|
|
if (index < 0)
|
|
return;
|
|
|
|
if (type == SlotTouchType.Delete)
|
|
{
|
|
ResetSlots();
|
|
return;
|
|
}
|
|
|
|
var pb = SlotPictureBoxes[index];
|
|
SlotUtil.UpdateSlot(pb, slot, pkm, SAV, FlagIllegal, type);
|
|
}
|
|
|
|
public int GetViewIndex(ISlotInfo slot)
|
|
{
|
|
if (!(slot is SlotInfoParty p))
|
|
return -1;
|
|
return p.Slot;
|
|
}
|
|
|
|
public ISlotInfo GetSlotData(PictureBox view)
|
|
{
|
|
int slot = GetSlot(view);
|
|
return new SlotInfoParty(slot);
|
|
}
|
|
|
|
private int GetSlot(PictureBox sender) => SlotPictureBoxes.IndexOf(sender);
|
|
public int ViewIndex => -999;
|
|
|
|
public void Setup(SlotChangeManager m)
|
|
{
|
|
M = m;
|
|
FlagIllegal = M.SE.FlagIllegal;
|
|
}
|
|
|
|
public void ResetSlots()
|
|
{
|
|
//pokeGrid1.SetBackground(SAV.WallpaperImage(0));
|
|
M?.Hover.Stop();
|
|
|
|
foreach (var pb in SlotPictureBoxes)
|
|
{
|
|
var slot = (SlotInfoParty) GetSlotData(pb);
|
|
SlotUtil.UpdateSlot(pb, slot, slot.Read(SAV), SAV, FlagIllegal);
|
|
}
|
|
|
|
if (M?.Env.Slots.Publisher.Previous is SlotInfoParty p)
|
|
SlotPictureBoxes[p.Slot].BackgroundImage = SlotUtil.GetTouchTypeBackground(M.Env.Slots.Publisher.PreviousType);
|
|
}
|
|
|
|
// Drag & Drop Handling
|
|
private void BoxSlot_MouseEnter(object sender, EventArgs e) => M?.MouseEnter(sender, e);
|
|
private void BoxSlot_MouseLeave(object sender, EventArgs e) => M?.MouseLeave(sender, e);
|
|
private void BoxSlot_MouseClick(object sender, MouseEventArgs e) => M?.MouseClick(sender, e);
|
|
private void BoxSlot_MouseUp(object sender, MouseEventArgs e) => M?.MouseUp(sender, e);
|
|
private void BoxSlot_MouseDown(object sender, MouseEventArgs e) => M?.MouseDown(sender, e);
|
|
private void BoxSlot_MouseMove(object sender, MouseEventArgs e) => M?.MouseMove(sender, e);
|
|
private void BoxSlot_DragEnter(object sender, DragEventArgs e) => M?.DragEnter(sender, e);
|
|
private void BoxSlot_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) => M?.QueryContinueDrag(sender, e);
|
|
private void BoxSlot_DragDrop(object sender, DragEventArgs e) => M?.DragDrop(sender, e);
|
|
|
|
public bool InitializeFromSAV(SaveFile sav)
|
|
{
|
|
Visible = sav.HasParty;
|
|
return InitializeGrid();
|
|
}
|
|
}
|
|
}
|