2
0
flabbet 10 сар өмнө
parent
commit
f56996b083

+ 2 - 1
src/PixiEditor/Models/DocumentModels/DocumentUpdater.cs

@@ -433,6 +433,7 @@ internal class DocumentUpdater
     {
     {
         IStructureMemberHandler? memberVM = doc.StructureHelper.FindOrThrow(info.Id);
         IStructureMemberHandler? memberVM = doc.StructureHelper.FindOrThrow(info.Id);
         memberVM.SetIsVisible(info.IsVisible);
         memberVM.SetIsVisible(info.IsVisible);
+        
     }
     }
 
 
     private void ProcessUpdateStructureMemberName(StructureMemberName_ChangeInfo info)
     private void ProcessUpdateStructureMemberName(StructureMemberName_ChangeInfo info)
@@ -449,7 +450,7 @@ internal class DocumentUpdater
 
 
     private void ProcessMoveStructureMember(MoveStructureMember_ChangeInfo info)
     private void ProcessMoveStructureMember(MoveStructureMember_ChangeInfo info)
     {
     {
-        // TODO: uh why is this empty, find out why
+        doc.InternalRaiseLayersChanged(new LayersChangedEventArgs(info.Id, LayerAction.Move));
     }
     }
 
 
     private void ProcessToggleOnionSkinning(ToggleOnionSkinning_PassthroughAction info)
     private void ProcessToggleOnionSkinning(ToggleOnionSkinning_PassthroughAction info)

+ 29 - 0
src/PixiEditor/ViewModels/Document/AnimationDataViewModel.cs

@@ -119,6 +119,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
     {
     {
         Document = document;
         Document = document;
         Internals = internals;
         Internals = internals;
+        Document.LayersChanged += (sender, args) => SortByLayers();
     }
     }
 
 
     public KeyFrameTime ActiveFrameTime => new KeyFrameTime(ActiveFrameBindable, ActiveNormalizedTime);
     public KeyFrameTime ActiveFrameTime => new KeyFrameTime(ActiveFrameBindable, ActiveNormalizedTime);
@@ -251,6 +252,8 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         {
         {
             allKeyFrames.Add(keyFrame);
             allKeyFrames.Add(keyFrame);
         }
         }
+        
+        SortByLayers();
     }
     }
 
 
     public void RemoveKeyFrame(Guid keyFrameId)
     public void RemoveKeyFrame(Guid keyFrameId)
@@ -357,4 +360,30 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         result = default;
         result = default;
         return false;
         return false;
     }
     }
+    
+    public void SortByLayers()
+    {
+        var allLayers = Document.StructureHelper.GetAllLayers();
+        var unsortedKeyFrames = keyFrames.ToList();
+        var layerKeyFrames = new List<KeyFrameGroupViewModel>();
+        foreach (var layer in allLayers)
+        {
+            var group = unsortedKeyFrames.FirstOrDefault(x => x is KeyFrameGroupViewModel group && group.LayerGuid == layer.Id) as KeyFrameGroupViewModel; 
+            if(group != null)
+            {
+                layerKeyFrames.Insert(0, group);
+            }
+        }
+
+        foreach (var remaining in unsortedKeyFrames)
+        {
+            if (remaining is KeyFrameGroupViewModel group && !layerKeyFrames.Contains(group))
+            {
+                layerKeyFrames.Add(group);
+            }
+        }
+        
+        this.keyFrames = new KeyFrameCollection(layerKeyFrames);
+        OnPropertyChanged(nameof(KeyFrames));
+    }
 }
 }

+ 10 - 1
src/PixiEditor/ViewModels/Document/KeyFrameCollection.cs

@@ -1,6 +1,7 @@
 using System.Collections.ObjectModel;
 using System.Collections.ObjectModel;
 using System.Collections.Specialized;
 using System.Collections.Specialized;
 using System.ComponentModel;
 using System.ComponentModel;
+using PixiEditor.Models.Handlers;
 using PixiEditor.Views.Animations;
 using PixiEditor.Views.Animations;
 
 
 namespace PixiEditor.ViewModels.Document;
 namespace PixiEditor.ViewModels.Document;
@@ -11,7 +12,15 @@ internal class KeyFrameCollection : ObservableCollection<KeyFrameGroupViewModel>
     {
     {
         
         
     }
     }
-    
+
+    public KeyFrameCollection(IEnumerable<KeyFrameGroupViewModel> source)
+    {
+        foreach (var handler in source)
+        {
+            Add(handler);
+        }
+    }
+
     public event Action<KeyFrameViewModel> KeyFrameAdded; 
     public event Action<KeyFrameViewModel> KeyFrameAdded; 
     public event Action<KeyFrameViewModel> KeyFrameRemoved; 
     public event Action<KeyFrameViewModel> KeyFrameRemoved;