diff --git a/src/HexManiac.Core/ViewModels/DexReorderTab.cs b/src/HexManiac.Core/ViewModels/DexReorderTab.cs index a23034b5..d68adeb0 100644 --- a/src/HexManiac.Core/ViewModels/DexReorderTab.cs +++ b/src/HexManiac.Core/ViewModels/DexReorderTab.cs @@ -119,12 +119,22 @@ namespace HavenSoft.HexManiac.Core.ViewModels { history.ChangeCompleted(); } - public void HandleMove(int originalIndex, int newIndex) { - if (originalIndex == newIndex) return; + public IList<(int index, int direction)> HandleMove(int originalIndex, int newIndex) { + var otherMovedElements = new List<(int, int)>(); + if (originalIndex == newIndex) return otherMovedElements; var element = Elements[originalIndex]; Elements.RemoveAt(originalIndex); Elements.Insert(newIndex, element); Debug.Assert(Elements.All(item => item != null), "Dex Reorder only works if there are no empty pokedex slots!"); + + for (int i = originalIndex; i < newIndex; i++) { + otherMovedElements.Add((i, 1)); + } + for (int i = newIndex + 1; i <= originalIndex; i++) { + otherMovedElements.Add((i, -1)); + } + + return otherMovedElements; } private static IDictionary Diff(IList oldList, IList newList) where T : IEquatable { diff --git a/src/HexManiac.WPF/Controls/DexReorderView.xaml.cs b/src/HexManiac.WPF/Controls/DexReorderView.xaml.cs index 33679bd4..23421ba0 100644 --- a/src/HexManiac.WPF/Controls/DexReorderView.xaml.cs +++ b/src/HexManiac.WPF/Controls/DexReorderView.xaml.cs @@ -37,21 +37,13 @@ namespace HavenSoft.HexManiac.WPF.Controls { var viewModel = (DexReorderTab)DataContext; oldTileIndex = Math.Min(Math.Max(0, oldTileIndex), Container.Items.Count - 1); newTileIndex = Math.Min(Math.Max(0, newTileIndex), Container.Items.Count - 1); - viewModel.HandleMove(oldTileIndex, newTileIndex); + var tilesToAnimate = viewModel.HandleMove(oldTileIndex, newTileIndex); - for (int i = oldTileIndex; i < newTileIndex; i++) { - // all these tiles were moved to the left - var image = (PixelImage)MainWindow.GetChild(Container, "PixelImage", viewModel.Elements[i]); + foreach(var tile in tilesToAnimate) { + var image = (PixelImage)MainWindow.GetChild(Container, "PixelImage", viewModel.Elements[tile.index]); if (!(image.RenderTransform is TranslateTransform)) image.RenderTransform = new TranslateTransform(); var transform = (TranslateTransform)image.RenderTransform; - transform.BeginAnimation(TranslateTransform.XProperty, new DoubleAnimation(ExpectedElementWidth, 0, span)); - } - for (int i = newTileIndex + 1; i <= oldTileIndex; i++) { - // all these tiles were moved to the right - var image = (PixelImage)MainWindow.GetChild(Container, "PixelImage", viewModel.Elements[i]); - if (!(image.RenderTransform is TranslateTransform)) image.RenderTransform = new TranslateTransform(); - var transform = (TranslateTransform)image.RenderTransform; - transform.BeginAnimation(TranslateTransform.XProperty, new DoubleAnimation(-ExpectedElementWidth, 0, span)); + transform.BeginAnimation(TranslateTransform.XProperty, new DoubleAnimation(ExpectedElementWidth * tile.direction, 0, span)); } }