Browse Source

wubba lubba dub dub

flabbet 4 years ago
parent
commit
a6976826dc
1 changed files with 29 additions and 9 deletions
  1. 29 9
      PixiEditor/Models/Layers/LayerStructure.cs

+ 29 - 9
PixiEditor/Models/Layers/LayerStructure.cs

@@ -88,24 +88,44 @@ namespace PixiEditor.Models.Layers
             {
             {
                 if (layer == topmostLayer) continue;
                 if (layer == topmostLayer) continue;
                 var layerGroup = GetGroupByLayer(layer.LayerGuid);
                 var layerGroup = GetGroupByLayer(layer.LayerGuid);
-                if (layerGroup == group.Parent)
-                {
-                    Owner.MoveLayerInStructure(layer.LayerGuid, lastLayer);
-                    AssignParent(layer.LayerGuid, group);
-                }
-                else if(layerGroup.Parent == group.Parent)
+
+                if (layerGroup != group.Parent)
                 {
                 {
-                    AssignParent(layer.LayerGuid, group);
-                    layerGroup.Parent = group;
-                    group.Subgroups.Add(layerGroup);
+                    GuidStructureItem sameLevelGroupParent = GetLevelGroup(layerGroup, group.Parent);
+                    if (GetGroupLayers(sameLevelGroupParent).TrueForAll(x => x.IsActive))
+                    {
+                        Owner.MoveGroupInStructure(sameLevelGroupParent.GroupGuid, lastLayer);
+                        lastLayer = sameLevelGroupParent.EndLayerGuid; // Todo: Shift click on group, select other layers in between
+                        continue;
+                    }
                 }
                 }
 
 
+                Owner.MoveLayerInStructure(layer.LayerGuid, lastLayer);
+                AssignParent(layer.LayerGuid, group);
+
                 lastLayer = layer.LayerGuid;
                 lastLayer = layer.LayerGuid;
             }
             }
 
 
             return group;
             return group;
         }
         }
 
 
+        private GuidStructureItem GetLevelGroup(GuidStructureItem group, GuidStructureItem levelGroup)
+        {
+            GuidStructureItem currentGroup = group;
+
+            while(currentGroup != null && currentGroup.Parent != null)
+            {
+                if(currentGroup == null)
+                {
+                    return null;
+                }
+
+                currentGroup = group.Parent;
+            }
+
+            return currentGroup;
+        }
+
         /// <summary>
         /// <summary>
         /// Finds layer which is topmost in layer tree.
         /// Finds layer which is topmost in layer tree.
         /// </summary>
         /// </summary>