flabbet 4 роки тому
батько
коміт
1d5b45319a

+ 12 - 10
PixiEditor/Models/DataHolders/Document/Document.Layers.cs

@@ -460,20 +460,22 @@ namespace PixiEditor.Models.DataHolders
             Guid referenceLayerGuid = (Guid)parameter[1];
             bool above = (bool)parameter[2];
 
-            //GuidStructureItem folder = LayerStructure.GetFolderByGuid(folderGuid);
-            //GuidStructureItem parentFolder = LayerStructure.GetFolderByLayer(referenceLayerGuid);
+            GuidStructureItem folder = LayerStructure.GetFolderByGuid(folderGuid);
+            GuidStructureItem parentFolder = LayerStructure.GetFolderByLayer(referenceLayerGuid);
 
-            //int layerIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == referenceLayerGuid));
-            //int relativeIndex = layerIndex > folder.ActualIndex ? folder.ActualIndex : folder.FolderDisplayIndex;
+            int layerIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == referenceLayerGuid));
+            int folderTopIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == folder.EndLayerGuid));
+            int oldIndex = folderTopIndex;
 
-            //int newIndex = CalculateNewIndex(layerIndex, above, relativeIndex);
+            if (layerIndex < folderTopIndex)
+            {
+                int folderBottomIndex = Layers.IndexOf(Layers.First(x => x.LayerGuid == folder.StartLayerGuid));
+                oldIndex = folderBottomIndex;
+            }
 
-            //if (newIndex == relativeIndex)
-            //{
-            //    return;
-            //}
+            int newIndex = CalculateNewIndex(layerIndex, above, oldIndex);
 
-            //LayerStructure.MoveFolder(folderGuid, parentFolder, newIndex);
+            LayerStructure.MoveFolder(folderGuid, parentFolder, newIndex);
         }
 
         private int CalculateNewIndex(int layerIndex, bool above, int oldIndex)

+ 20 - 0
PixiEditor/Models/Layers/FolderData.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PixiEditor.Models.Layers
+{
+    public record FolderData
+    {
+        public int TopIndex { get; set; }
+        public int BottomIndex { get; set; }
+
+        public FolderData(int topIndex, int bottomIndex)
+        {
+            TopIndex = topIndex;
+            BottomIndex = bottomIndex;
+        }
+    }
+}

+ 45 - 43
PixiEditor/Models/Layers/LayerStructure.cs

@@ -47,64 +47,66 @@ namespace PixiEditor.Models.Layers
         {
             var folder = GetFolderByGuid(folderGuid);
             bool reverseOrder = true;
+            int folderTopIndex = Owner.Layers.IndexOf(Owner.Layers.First(x => x.LayerGuid == folder.EndLayerGuid));
+            int folderBottomIndex = Owner.Layers.IndexOf(Owner.Layers.First(x => x.LayerGuid == folder.StartLayerGuid));
 
             int difference;
 
-            //if (newIndex > oldFolderActualIndex)
-            //{
-            //    difference = indexToApply - oldFolderActualIndex;
-            //}
-            //else
-            //{
-            //    reverseOrder = false;
-            //    difference = newIndex - oldFolderDisplayIndex;
-            //}
+            if (newIndex > folderTopIndex)
+            {
+                difference = newIndex - folderTopIndex;
+            }
+            else
+            {
+                reverseOrder = false;
+                difference = newIndex - folderBottomIndex;
+            }
 
-            //MoveLayersInFolder(folder, difference, reverseOrder);
+            MoveLayersInFolder(new FolderData(folderTopIndex, folderBottomIndex), difference, reverseOrder);
 
-            //if (folder.Parent == null)
-            //{
-            //    Folders.Remove(folder);
-            //}
+            if (folder.Parent == null)
+            {
+                Folders.Remove(folder);
+            }
 
-            //if (parentFolder == null && !Folders.Contains(folder))
-            //{
-            //    Folders.Add(folder);
-            //}
-            //else if (parentFolder != null)
-            //{
-            //    parentFolder.Subfolders.Add(folder);
-            //}
+            if (parentFolder == null && !Folders.Contains(folder))
+            {
+                Folders.Add(folder);
+            }
+            else if (parentFolder != null)
+            {
+                parentFolder.Subfolders.Add(folder);
+            }
         }
 
-        private void MoveLayersInFolder(GuidStructureItem folder, int moveBy, bool reverseOrder)
+        private void MoveLayersInFolder(FolderData folder, int moveBy, bool reverseOrder)
         {
-            //List<Guid> layersInOrder = GetLayersInOrder(folder);
+            List<Guid> layersInOrder = GetLayersInOrder(folder);
 
-            //List<Guid> layerGuids = reverseOrder ? layersInOrder.Reverse<Guid>().ToList() : layersInOrder;
+            List<Guid> layerGuids = reverseOrder ? layersInOrder.Reverse<Guid>().ToList() : layersInOrder;
 
-            //for (int i = 0; i < layersInOrder.Count; i++)
-            //{
-            //    Guid layerGuid = layerGuids[i];
-            //    var layer = Owner.Layers.First(x => x.LayerGuid == layerGuid);
-            //    int layerIndex = Owner.Layers.IndexOf(layer);
-            //    Owner.Layers.Move(layerIndex, layerIndex + moveBy);
-            //}
+            for (int i = 0; i < layersInOrder.Count; i++)
+            {
+                Guid layerGuid = layerGuids[i];
+                var layer = Owner.Layers.First(x => x.LayerGuid == layerGuid);
+                int layerIndex = Owner.Layers.IndexOf(layer);
+                Owner.Layers.Move(layerIndex, layerIndex + moveBy);
+            }
         }
 
-        //private List<Guid> GetLayersInOrder(GuidStructureItem folder)
-        //{
-        //    List<Guid> layerGuids = new ();
-        //    int minIndex = Owner.Layers.folder.FolderDisplayIndex;
-        //    int maxIndex = folder.ActualIndex;
+        private List<Guid> GetLayersInOrder(FolderData folder)
+        {
+            List<Guid> layerGuids = new ();
+            int minIndex = folder.BottomIndex;
+            int maxIndex = folder.TopIndex;
 
-        //    for (int i = minIndex; i <= maxIndex; i++)
-        //    {
-        //        layerGuids.Add(Owner.Layers[i].LayerGuid);
-        //    }
+            for (int i = minIndex; i <= maxIndex; i++)
+            {
+                layerGuids.Add(Owner.Layers[i].LayerGuid);
+            }
 
-        //    return layerGuids;
-        //}
+            return layerGuids;
+        }
 
 #nullable disable
         private GuidStructureItem GetFolderByLayer(Guid layerGuid, IEnumerable<GuidStructureItem> folders)

+ 0 - 1
PixiEditor/ViewModels/SubViewModels/Main/FileViewModel.cs

@@ -110,7 +110,6 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
 
             Owner.ResetProgramStateValues();
 
-
             Owner.BitmapManager.ActiveDocument.AddNewLayer("Test");
             Owner.BitmapManager.ActiveDocument.AddNewLayer("Test1");
             Owner.BitmapManager.ActiveDocument.AddNewLayer("Test1 sub1");