From 2bfa98db09a9cc5b2ad20c167ebe7a16e7f2aac0 Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 16 May 2017 08:56:13 -0700 Subject: [PATCH] Refactor dragdrop managing logic Relocate class out of main form for reusability/less lines in main.cs refactored to be a bit more oop --- PKHeX.WinForms/MainWindow/DragDropManager.cs | 94 ++++++++ PKHeX.WinForms/MainWindow/Main.cs | 210 +++++------------- PKHeX.WinForms/PKHeX.WinForms.csproj | 1 + .../Subforms/Save Editors/SAV_BoxViewer.cs | 92 ++++---- 4 files changed, 195 insertions(+), 202 deletions(-) create mode 100644 PKHeX.WinForms/MainWindow/DragDropManager.cs diff --git a/PKHeX.WinForms/MainWindow/DragDropManager.cs b/PKHeX.WinForms/MainWindow/DragDropManager.cs new file mode 100644 index 000000000..9346b08ba --- /dev/null +++ b/PKHeX.WinForms/MainWindow/DragDropManager.cs @@ -0,0 +1,94 @@ +using PKHeX.Core; + +namespace PKHeX.WinForms +{ + public class DragDropManager + { + private readonly SaveFile SAV; + + public bool LeftMouseIsDown; + public bool RightMouseIsDown; + public bool DragDropInProgress; + + public object Cursor; + public string CurrentPath; + + public DragLocation Source = new DragLocation(); + public DragLocation Destination = new DragLocation(); + + public DragDropManager(SaveFile sav) + { + SAV = sav; + Source.Data = SAV.BlankPKM.EncryptedPartyData; + } + + public class DragLocation + { + public object Parent; + public byte[] Data; + public int Offset = -1; + public int Slot = -1; + public int Box = -1; + + public bool IsParty => 30 <= Slot && Slot < 36; + public bool IsValid => Slot > -1 && (Box > -1 || IsParty); + } + + public bool SameBox => Source.Box > -1 && Source.Box == Destination.Box; + public bool SameSlot => Source.Slot == Destination.Slot && Source.Box == Destination.Box; + + // PKM Get Set + public PKM GetPKM(bool src) + { + var slot = src ? Source : Destination; + int o = slot.Offset; + return slot.IsParty ? SAV.getPartySlot(o) : SAV.getStoredSlot(o); + } + public void SetPKM(PKM pk, bool src) + { + var slot = src ? Source : Destination; + int o = slot.Offset; + if (!slot.IsParty) + { SAV.setStoredSlot(pk, o); return; } + + if (src) + { + if (pk.Species == 0) // Empty Slot + { + SAV.deletePartySlot(Source.Slot - 30); + return; + } + } + else + { + if (30 + SAV.PartyCount < slot.Slot) + { + o = SAV.getPartyOffset(SAV.PartyCount); + slot.Slot = 30 + SAV.PartyCount; + } + } + + if (pk.Stat_HPMax == 0) // Without Stats (Box) + { + pk.setStats(pk.getStats(SAV.Personal.getFormeEntry(pk.Species, pk.AltForm))); + pk.Stat_Level = pk.CurrentLevel; + } + SAV.setPartySlot(pk, o); + } + + public bool? WasDragParticipant(object form, int index) + { + if (Destination.Box != index && Source.Box != index) + return null; // form was not watching box + return Source.Parent == form || Destination.Parent == form; // form already updated? + } + + public void Reset() + { + LeftMouseIsDown = RightMouseIsDown = DragDropInProgress = false; + Cursor = CurrentPath = null; + Source = new DragLocation(); + Destination = new DragLocation(); + } + } +} diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index 67cfb6595..4b9ab2d14 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -22,7 +22,6 @@ public Main() { #region Initialize Form new Thread(() => new SplashScreen().ShowDialog()).Start(); - DragInfo.slotPkmSource = SAV.BlankPKM.EncryptedPartyData; InitializeComponent(); // Check for Updates @@ -1034,6 +1033,7 @@ private void openSAV(SaveFile sav, string path) PKM pk = preparePKM(); populateFields(SAV.BlankPKM); SAV = sav; + DragInfo = new DragDropManager(SAV); string title = $"PKH{(HaX ? "a" : "e")}X ({Resources.ProgramVersion}) - " + $"{SAV.GetType().Name}: "; if (path != null) // Actual save file @@ -2859,7 +2859,6 @@ private void updateTSV(object sender, EventArgs e) Tip2.SetToolTip(TB_SID, IDstr); pkm.PID = Util.getHEXval(TB_PID.Text); - var PSV = pkm.PSV; Tip3.SetToolTip(TB_PID, $"PSV: {pkm.PSV:d4}"); } private void update_ID(object sender, EventArgs e) @@ -4248,8 +4247,9 @@ private void clickSaveFileName(object sender, EventArgs e) } // Drag and drop related functions - private static Image OriginalBackground; - private static Image CurrentBackground; + public static DragDropManager DragInfo; + private Image OriginalBackground; + private Image CurrentBackground; private void pbBoxSlot_MouseEnter(object sender, EventArgs e) { var pb = (PictureBox) sender; @@ -4269,29 +4269,29 @@ private void pbBoxSlot_MouseLeave(object sender, EventArgs e) } private void pbBoxSlot_MouseClick(object sender, MouseEventArgs e) { - if (!DragInfo.slotDragDropInProgress) + if (!DragInfo.DragDropInProgress) clickSlot(sender, e); } private void pbBoxSlot_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) - DragInfo.slotLeftMouseIsDown = false; + DragInfo.LeftMouseIsDown = false; if (e.Button == MouseButtons.Right) - DragInfo.slotRightMouseIsDown = false; + DragInfo.RightMouseIsDown = false; } private void pbBoxSlot_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) - DragInfo.slotLeftMouseIsDown = true; + DragInfo.LeftMouseIsDown = true; if (e.Button == MouseButtons.Right) - DragInfo.slotRightMouseIsDown = true; + DragInfo.RightMouseIsDown = true; } private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) { - if (DragInfo.slotDragDropInProgress) + if (DragInfo.DragDropInProgress) return; - if (!DragInfo.slotLeftMouseIsDown) + if (!DragInfo.LeftMouseIsDown) return; // The goal is to create a temporary PKX file for the underlying Pokemon @@ -4308,19 +4308,19 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) return; // Set flag to prevent re-entering. - DragInfo.slotDragDropInProgress = true; + DragInfo.DragDropInProgress = true; - DragInfo.slotSource = this; - DragInfo.slotSourceSlotNumber = slot; - DragInfo.slotSourceBoxNumber = box; - DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber); + DragInfo.Source.Parent = this; + DragInfo.Source.Slot = slot; + DragInfo.Source.Box = box; + DragInfo.Source.Offset = getPKXOffset(DragInfo.Source.Slot); // Prepare Data - DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED); + DragInfo.Source.Data = SAV.getData(DragInfo.Source.Offset, SAV.SIZE_STORED); // Make a new file name based off the PID bool encrypt = ModifierKeys == Keys.Control; - byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource); + byte[] dragdata = SAV.decryptPKM(DragInfo.Source.Data); Array.Resize(ref dragdata, SAV.SIZE_STORED); PKM pkx = SAV.getPKM(dragdata); string fn = pkx.FileName; fn = fn.Substring(0, fn.LastIndexOf('.')); @@ -4338,22 +4338,22 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) // Thread Blocks on DoDragDrop DragInfo.CurrentPath = newfile; DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move); - if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img + if (!DragInfo.Source.IsValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img pb.Image = img; else // refresh image - getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset)); + getQuickFiller(pb, SAV.getStoredSlot(DragInfo.Source.Offset)); pb.BackgroundImage = null; - if (DragInfo.SameBox && DragInfo.DestinationValid) + if (DragInfo.SameBox && DragInfo.Destination.IsValid) { - if (SAV.getIsTeamSet(box, DragInfo.slotDestinationSlotNumber) ^ SAV.getIsTeamSet(box, DragInfo.slotSourceSlotNumber)) - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], SAV.getStoredSlot(DragInfo.slotDestinationOffset)); + if (SAV.getIsTeamSet(box, DragInfo.Destination.Slot) ^ SAV.getIsTeamSet(box, DragInfo.Source.Slot)) + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], SAV.getStoredSlot(DragInfo.Destination.Offset)); else - SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img; + SlotPictureBoxes[DragInfo.Destination.Slot].Image = img; } if (result == DragDropEffects.Copy) // viewed in tabs, apply 'view' highlight - getSlotColor(DragInfo.slotSourceSlotNumber, Resources.slotView); + getSlotColor(DragInfo.Source.Slot, Resources.slotView); } catch (Exception x) { @@ -4371,28 +4371,28 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) if (File.Exists(newfile) && DragInfo.CurrentPath == null) File.Delete(newfile); }).Start(); - if (DragInfo.SourceParty || DragInfo.DestinationParty) + if (DragInfo.Source.IsParty || DragInfo.Destination.IsParty) setParty(); } private void pbBoxSlot_DragDrop(object sender, DragEventArgs e) { - DragInfo.slotDestination = this; - DragInfo.slotDestinationSlotNumber = getSlot(sender); - DragInfo.slotDestinationOffset = getPKXOffset(DragInfo.slotDestinationSlotNumber); - DragInfo.slotDestinationBoxNumber = DragInfo.DestinationParty ? -1 : CB_BoxSelect.SelectedIndex; + DragInfo.Destination.Parent = this; + DragInfo.Destination.Slot = getSlot(sender); + DragInfo.Destination.Offset = getPKXOffset(DragInfo.Destination.Slot); + DragInfo.Destination.Box = DragInfo.Destination.IsParty ? -1 : CB_BoxSelect.SelectedIndex; // Check for In-Dropped files (PKX,SAV,ETC) string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (Directory.Exists(files[0])) { loadBoxesFromDB(files[0]); return; } if (DragInfo.SameSlot) return; - if (SAV.getIsSlotLocked(DragInfo.slotDestinationBoxNumber, DragInfo.slotDestinationSlotNumber)) + if (SAV.getIsSlotLocked(DragInfo.Destination.Box, DragInfo.Destination.Slot)) { - DragInfo.slotDestinationSlotNumber = -1; // Invalidate + DragInfo.Destination.Slot = -1; // Invalidate WinFormsUtil.Alert("Unable to set to locked slot."); return; } - if (DragInfo.slotSourceOffset < 0) // file + if (DragInfo.Source.Offset < 0) // file { if (files.Length <= 0) return; @@ -4417,50 +4417,50 @@ private void pbBoxSlot_DragDrop(object sender, DragEventArgs e) { Console.WriteLine(c); Console.WriteLine(concat); return; } } - DragInfo.setPKMtoDestination(SAV, pk); - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], pk); - getSlotColor(DragInfo.slotDestinationSlotNumber, Resources.slotSet); + DragInfo.SetPKM(pk, false); + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], pk); + getSlotColor(DragInfo.Destination.Slot, Resources.slotSet); Console.WriteLine(c); } else { - PKM pkz = DragInfo.getPKMfromSource(SAV); - if (!DragInfo.SourceValid) { } // not overwritable, do nothing - else if (ModifierKeys == Keys.Alt && DragInfo.DestinationValid) // overwrite delete old slot + PKM pkz = DragInfo.GetPKM(true); + if (!DragInfo.Source.IsValid) { } // not overwritable, do nothing + else if (ModifierKeys == Keys.Alt && DragInfo.Destination.IsValid) // overwrite delete old slot { // Clear from slot if (DragInfo.SameBox) - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], SAV.BlankPKM); // picturebox + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], SAV.BlankPKM); // picturebox - DragInfo.setPKMtoSource(SAV, SAV.BlankPKM); + DragInfo.SetPKM(SAV.BlankPKM, true); } - else if (ModifierKeys != Keys.Control && DragInfo.DestinationValid) + else if (ModifierKeys != Keys.Control && DragInfo.Destination.IsValid) { // Load data from destination PKM pk = ((PictureBox) sender).Image != null - ? DragInfo.getPKMfromDestination(SAV) + ? DragInfo.GetPKM(false) : SAV.BlankPKM; // Set destination pokemon image to source picture box if (DragInfo.SameBox) - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], pk); + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], pk); // Set destination pokemon data to source slot - DragInfo.setPKMtoSource(SAV, pk); + DragInfo.SetPKM(pk, true); } else if (DragInfo.SameBox) - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], pkz); + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], pkz); // Copy from temp to destination slot. - DragInfo.setPKMtoDestination(SAV, pkz); - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], pkz); + DragInfo.SetPKM(pkz, false); + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], pkz); e.Effect = DragDropEffects.Link; Cursor = DefaultCursor; } - if (DragInfo.SourceParty || DragInfo.DestinationParty) + if (DragInfo.Source.IsParty || DragInfo.Destination.IsParty) setParty(); - if (DragInfo.slotSource == null) // another instance or file + if (DragInfo.Source.Parent == null) // another instance or file { notifyBoxViewerRefresh(); DragInfo.Reset(); @@ -4473,120 +4473,18 @@ private void pbBoxSlot_DragEnter(object sender, DragEventArgs e) else if (e.Data != null) // within e.Effect = DragDropEffects.Move; - if (DragInfo.slotDragDropInProgress) + if (DragInfo.DragDropInProgress) Cursor = (Cursor)DragInfo.Cursor; } private void pbBoxSlot_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { if (e.Action == DragAction.Cancel || e.Action == DragAction.Drop) { - DragInfo.slotLeftMouseIsDown = false; - DragInfo.slotRightMouseIsDown = false; - DragInfo.slotDragDropInProgress = false; + DragInfo.LeftMouseIsDown = false; + DragInfo.RightMouseIsDown = false; + DragInfo.DragDropInProgress = false; } } - - public static class DragInfo - { - public static bool slotLeftMouseIsDown; - public static bool slotRightMouseIsDown; - public static bool slotDragDropInProgress; - - public static byte[] slotPkmSource; - public static byte[] slotPkmDestination; - - public static object slotSource; - public static int slotSourceOffset = -1; - public static int slotSourceSlotNumber = -1; - public static int slotSourceBoxNumber = -1; - - public static object slotDestination; - public static int slotDestinationOffset = -1; - public static int slotDestinationSlotNumber = -1; - public static int slotDestinationBoxNumber = -1; - - public static object Cursor; - public static string CurrentPath; - - public static bool SameBox => slotSourceBoxNumber > -1 && slotSourceBoxNumber == slotDestinationBoxNumber; - public static bool SameSlot => slotSourceSlotNumber == slotDestinationSlotNumber && slotSourceBoxNumber == slotDestinationBoxNumber; - public static bool SourceValid => slotSourceSlotNumber > -1 && (slotSourceBoxNumber > -1 || SourceParty); - public static bool DestinationValid => slotDestinationSlotNumber > -1 && (slotDestinationBoxNumber > -1 || DestinationParty); - public static bool SourceParty => 30 <= slotSourceSlotNumber && slotSourceSlotNumber < 36; - public static bool DestinationParty => 30 <= slotDestinationSlotNumber && slotDestinationSlotNumber < 36; - - // PKM Get Set - public static PKM getPKMfromSource(SaveFile SAV) - { - int o = slotSourceOffset; - return SourceParty ? SAV.getPartySlot(o) : SAV.getStoredSlot(o); - } - public static PKM getPKMfromDestination(SaveFile SAV) - { - int o = slotDestinationOffset; - return DestinationParty ? SAV.getPartySlot(o) : SAV.getStoredSlot(o); - } - public static void setPKMtoSource(SaveFile SAV, PKM pk) - { - int o = slotSourceOffset; - if (!SourceParty) - { SAV.setStoredSlot(pk, o); return; } - - if (pk.Species == 0) // Empty Slot - { SAV.deletePartySlot(slotSourceSlotNumber-30); return; } - - if (pk.Stat_HPMax == 0) // Without Stats (Box) - { - pk.setStats(pk.getStats(SAV.Personal.getFormeEntry(pk.Species, pk.AltForm))); - pk.Stat_Level = pk.CurrentLevel; - } - SAV.setPartySlot(pk, o); - } - public static void setPKMtoDestination(SaveFile SAV, PKM pk) - { - int o = slotDestinationOffset; - if (!DestinationParty) - { SAV.setStoredSlot(pk, o); return; } - - if (30 + SAV.PartyCount < slotDestinationSlotNumber) - { - o = SAV.getPartyOffset(SAV.PartyCount); - slotDestinationSlotNumber = 30 + SAV.PartyCount; - } - if (pk.Stat_HPMax == 0) // Without Stats (Box/File) - { - pk.setStats(pk.getStats(SAV.Personal.getFormeEntry(pk.Species, pk.AltForm))); - pk.Stat_Level = pk.CurrentLevel; - } - SAV.setPartySlot(pk, o); - } - - public static void Reset() - { - slotLeftMouseIsDown = false; - slotRightMouseIsDown = false; - slotDragDropInProgress = false; - - slotPkmSource = null; - slotSourceOffset = slotSourceSlotNumber = slotSourceBoxNumber = -1; - slotPkmDestination = null; - slotDestinationOffset = slotSourceBoxNumber = slotDestinationBoxNumber = -1; - - Cursor = null; - CurrentPath = null; - - slotSource = null; - slotDestination = null; - } - - public static bool? WasDragParticipant(object form, int index) - { - if (slotDestinationBoxNumber != index && slotSourceBoxNumber != index) - return null; // form was not watching box - return slotSource == form || slotDestination == form; // form already updated? - } - } - #endregion } } diff --git a/PKHeX.WinForms/PKHeX.WinForms.csproj b/PKHeX.WinForms/PKHeX.WinForms.csproj index 0fce22803..e47f353c0 100644 --- a/PKHeX.WinForms/PKHeX.WinForms.csproj +++ b/PKHeX.WinForms/PKHeX.WinForms.csproj @@ -165,6 +165,7 @@ + Form diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs index 8c2925148..1ba527297 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_BoxViewer.cs @@ -157,23 +157,23 @@ private void pbBoxSlot_MouseLeave(object sender, EventArgs e) private void pbBoxSlot_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) - DragInfo.slotLeftMouseIsDown = false; + DragInfo.LeftMouseIsDown = false; if (e.Button == MouseButtons.Right) - DragInfo.slotRightMouseIsDown = false; + DragInfo.RightMouseIsDown = false; } private void pbBoxSlot_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) - DragInfo.slotLeftMouseIsDown = true; + DragInfo.LeftMouseIsDown = true; if (e.Button == MouseButtons.Right) - DragInfo.slotRightMouseIsDown = true; + DragInfo.RightMouseIsDown = true; } private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) { - if (DragInfo.slotDragDropInProgress) + if (DragInfo.DragDropInProgress) return; - if (!DragInfo.slotLeftMouseIsDown) + if (!DragInfo.LeftMouseIsDown) return; // The goal is to create a temporary PKX file for the underlying Pokemon @@ -190,18 +190,18 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) return; // Set flag to prevent re-entering. - DragInfo.slotDragDropInProgress = true; + DragInfo.DragDropInProgress = true; - DragInfo.slotSource = this; - DragInfo.slotSourceSlotNumber = slot; - DragInfo.slotSourceBoxNumber = box; - DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber); + DragInfo.Source.Parent = this; + DragInfo.Source.Slot = slot; + DragInfo.Source.Box = box; + DragInfo.Source.Offset = getPKXOffset(DragInfo.Source.Slot); // Prepare Data - DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED); + DragInfo.Source.Data = SAV.getData(DragInfo.Source.Offset, SAV.SIZE_STORED); // Make a new file name based off the PID - byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource); + byte[] dragdata = SAV.decryptPKM(DragInfo.Source.Data); Array.Resize(ref dragdata, SAV.SIZE_STORED); PKM pkx = SAV.getPKM(dragdata); string filename = pkx.FileName; @@ -218,18 +218,18 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) // Thread Blocks on DoDragDrop DragInfo.CurrentPath = newfile; DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move); - if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img + if (!DragInfo.Source.IsValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img pb.Image = img; else // refresh image - getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset)); + getQuickFiller(pb, SAV.getStoredSlot(DragInfo.Source.Offset)); pb.BackgroundImage = null; - if (DragInfo.SameBox && DragInfo.DestinationValid) + if (DragInfo.SameBox && DragInfo.Destination.IsValid) { - if (SAV.getIsTeamSet(box, DragInfo.slotDestinationSlotNumber) ^ SAV.getIsTeamSet(box, DragInfo.slotSourceSlotNumber)) - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], SAV.getStoredSlot(DragInfo.slotDestinationOffset)); + if (SAV.getIsTeamSet(box, DragInfo.Destination.Slot) ^ SAV.getIsTeamSet(box, DragInfo.Source.Slot)) + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], SAV.getStoredSlot(DragInfo.Destination.Offset)); else - SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img; + SlotPictureBoxes[DragInfo.Destination.Slot].Image = img; } } catch (Exception x) @@ -251,21 +251,21 @@ private void pbBoxSlot_MouseMove(object sender, MouseEventArgs e) } private void pbBoxSlot_DragDrop(object sender, DragEventArgs e) { - DragInfo.slotDestination = this; - DragInfo.slotDestinationSlotNumber = getSlot(sender); - DragInfo.slotDestinationOffset = getPKXOffset(DragInfo.slotDestinationSlotNumber); - DragInfo.slotDestinationBoxNumber = CB_BoxSelect.SelectedIndex; + DragInfo.Destination.Parent = this; + DragInfo.Destination.Slot = getSlot(sender); + DragInfo.Destination.Offset = getPKXOffset(DragInfo.Destination.Slot); + DragInfo.Destination.Box = CB_BoxSelect.SelectedIndex; // Check for In-Dropped files (PKX,SAV,ETC) string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (Directory.Exists(files[0])) { return; } - if (SAV.getIsSlotLocked(DragInfo.slotDestinationBoxNumber, DragInfo.slotDestinationSlotNumber)) + if (SAV.getIsSlotLocked(DragInfo.Destination.Box, DragInfo.Destination.Slot)) { - DragInfo.slotDestinationSlotNumber = -1; // Invalidate + DragInfo.Destination.Slot = -1; // Invalidate WinFormsUtil.Alert("Unable to set to locked slot."); return; } - if (DragInfo.slotSourceOffset < 0) // file + if (DragInfo.Source.Offset < 0) // file { if (files.Length <= 0) return; @@ -291,49 +291,49 @@ private void pbBoxSlot_DragDrop(object sender, DragEventArgs e) { Console.WriteLine(c); Console.WriteLine(concat); return; } } - DragInfo.setPKMtoDestination(SAV, pk); - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], pk); + DragInfo.SetPKM(pk, false); + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], pk); Console.WriteLine(c); } else { - PKM pkz = DragInfo.getPKMfromSource(SAV); - if (!DragInfo.SourceValid) { } // not overwritable, do nothing - else if (ModifierKeys == Keys.Alt && DragInfo.DestinationValid) // overwrite + PKM pkz = DragInfo.GetPKM(true); + if (!DragInfo.Source.IsValid) { } // not overwritable, do nothing + else if (ModifierKeys == Keys.Alt && DragInfo.Destination.IsValid) // overwrite { // Clear from slot if (DragInfo.SameBox) - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], SAV.BlankPKM); // picturebox + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], SAV.BlankPKM); // picturebox - DragInfo.setPKMtoSource(SAV, SAV.BlankPKM); + DragInfo.SetPKM(SAV.BlankPKM, true); } - else if (ModifierKeys != Keys.Control && DragInfo.DestinationValid) // move + else if (ModifierKeys != Keys.Control && DragInfo.Destination.IsValid) // move { // Load data from destination PKM pk = ((PictureBox)sender).Image != null - ? DragInfo.getPKMfromDestination(SAV) + ? DragInfo.GetPKM(false) : SAV.BlankPKM; // Set destination pokemon image to source picture box if (DragInfo.SameBox) - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], pk); + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], pk); // Set destination pokemon data to source slot - DragInfo.setPKMtoSource(SAV, pk); + DragInfo.SetPKM(pk, true); } else if (DragInfo.SameBox) // clone - getQuickFiller(SlotPictureBoxes[DragInfo.slotSourceSlotNumber], pkz); + getQuickFiller(SlotPictureBoxes[DragInfo.Source.Slot], pkz); // Copy from temp to destination slot. - DragInfo.setPKMtoDestination(SAV, pkz); - getQuickFiller(SlotPictureBoxes[DragInfo.slotDestinationSlotNumber], pkz); + DragInfo.SetPKM(pkz, false); + getQuickFiller(SlotPictureBoxes[DragInfo.Destination.Slot], pkz); e.Effect = DragDropEffects.Link; Cursor = DefaultCursor; } - if (DragInfo.SourceParty || DragInfo.DestinationParty) + if (DragInfo.Source.IsParty || DragInfo.Destination.IsParty) parent.setParty(); - if (DragInfo.slotSource == null) // another instance or file + if (DragInfo.Source.Parent == null) // another instance or file { parent.notifyBoxViewerRefresh(); DragInfo.Reset(); @@ -346,16 +346,16 @@ private void pbBoxSlot_DragEnter(object sender, DragEventArgs e) else if (e.Data != null) // within e.Effect = DragDropEffects.Move; - if (DragInfo.slotDragDropInProgress) + if (DragInfo.DragDropInProgress) Cursor = (Cursor)DragInfo.Cursor; } private void pbBoxSlot_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { if (e.Action == DragAction.Cancel || e.Action == DragAction.Drop) { - DragInfo.slotLeftMouseIsDown = false; - DragInfo.slotRightMouseIsDown = false; - DragInfo.slotDragDropInProgress = false; + DragInfo.LeftMouseIsDown = false; + DragInfo.RightMouseIsDown = false; + DragInfo.DragDropInProgress = false; } }