Browse Source

Added move group undo

flabbet 4 years ago
parent
commit
05d73730c0

+ 34 - 5
PixiEditor/Models/DataHolders/Document/Document.Layers.cs

@@ -38,7 +38,15 @@ namespace PixiEditor.Models.DataHolders
             get => layerStructure;
             set
             {
+                if (layerStructure != null)
+                {
+                    layerStructure.Groups.CollectionChanged -= Groups_CollectionChanged;
+                    layerStructure.LayerStructureChanged -= LayerStructure_LayerStructureChanged;
+                }
+
                 SetProperty(ref layerStructure, value);
+                value.Groups.CollectionChanged += Groups_CollectionChanged;
+                value.LayerStructureChanged += LayerStructure_LayerStructureChanged;
             }
         }
 
@@ -116,18 +124,39 @@ namespace PixiEditor.Models.DataHolders
             UndoManager.SquashUndoChanges(2, "Move layer");
         }
 
-        public void MoveFolderInStructure(Guid groupGuid, Guid referenceLayer, bool above = false)
+        public void MoveGroupInStructure(Guid groupGuid, Guid referenceLayer, bool above = false)
         {
             var args = new object[] { groupGuid, referenceLayer, above };
 
+            var topLayer = Layers.First(x => x.LayerGuid == LayerStructure.GetGroupByGuid(groupGuid).EndLayerGuid);
+            var bottomLayer = Layers.First(x => x.LayerGuid == LayerStructure.GetGroupByGuid(groupGuid).StartLayerGuid);
+
+            int indexOfTopLayer = Layers.IndexOf(topLayer);
+            Guid oldReferenceLayerGuid;
+            bool oldAbove = false;
+
+            if(indexOfTopLayer + 1 < Layers.Count)
+            {
+                oldReferenceLayerGuid = topLayer.LayerGuid;
+            }
+            else
+            {
+                int indexOfBottomLayer = Layers.IndexOf(bottomLayer);
+                oldReferenceLayerGuid = Layers[indexOfBottomLayer - 1].LayerGuid;
+                oldAbove = true;
+            }
+
             var oldLayerStructure = LayerStructure.Clone();
 
-            MoveFolderInStructureProcess(args);
+            MoveGroupInStructureProcess(args);
 
             AddLayerStructureToUndo(oldLayerStructure);
 
-            //UndoManager.AddUndoChange(new Change(
-            //    MoveFolderInStructureProcess, ));
+            UndoManager.AddUndoChange(new Change(
+                MoveGroupInStructureProcess,
+                new object[] { groupGuid, oldReferenceLayerGuid, oldAbove },
+                MoveGroupInStructureProcess,
+                args));
 
             UndoManager.SquashUndoChanges(2, "Move gorup");
         }
@@ -495,7 +524,7 @@ namespace PixiEditor.Models.DataHolders
             }
         }
 
-        private void MoveFolderInStructureProcess(object[] parameter)
+        private void MoveGroupInStructureProcess(object[] parameter)
         {
             Guid folderGuid = (Guid)parameter[0];
             Guid referenceLayerGuid = (Guid)parameter[1];

+ 1 - 4
PixiEditor/Models/Layers/LayerStructure.cs

@@ -2,9 +2,6 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
-using System.Security.Cryptography;
-using System.Windows;
-using PixiEditor.Helpers;
 using PixiEditor.Models.DataHolders;
 
 namespace PixiEditor.Models.Layers
@@ -45,7 +42,7 @@ namespace PixiEditor.Models.Layers
                 outputGroups.Add(new(group.Name, group.StartLayerGuid, group.EndLayerGuid, group.Subgroups, group.Parent)
                 {
                     GroupGuid = group.GroupGuid,
-                    IsExpanded = group.IsExpanded,
+                    IsExpanded = group.IsExpanded
                 });
                 if(group.Subgroups.Count > 0)
                 {

+ 1 - 1
PixiEditor/Views/UserControls/LayerGroupControl.xaml.cs

@@ -180,7 +180,7 @@ namespace PixiEditor.Views.UserControls
                 document.Layers.Insert(indexOfReferenceLayer, tempLayer);
 
                 document.LayerStructure.AssignParent(tempLayer.LayerGuid, GroupData.Parent);
-                document.MoveFolderInStructure(group, tempLayer.LayerGuid, above);
+                document.MoveGroupInStructure(group, tempLayer.LayerGuid, above);
                 document.LayerStructure.AssignParent(tempLayer.LayerGuid, null);
                 document.RemoveLayer(tempLayer, false);
             }

+ 1 - 1
PixiEditor/Views/UserControls/LayerItem.xaml.cs

@@ -182,7 +182,7 @@ namespace PixiEditor.Views
                     return;
                 }
 
-                document.MoveFolderInStructure(folder, LayerGuid, above);
+                document.MoveGroupInStructure(folder, LayerGuid, above);
             }
         }