Browse Source

Fixed selecting multiple layers for transform selected executor

flabbet 7 months ago
parent
commit
0f9f706f37

+ 2 - 1
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -45,7 +45,8 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
 
         members = document.SoftSelectedStructureMembers
             .Append(document.SelectedStructureMember)
-            .Where(static m => m is ILayerHandler).ToList();
+            .Where(static m => m is ILayerHandler)
+            .Distinct().ToList();
 
         if (!members.Any())
             return ExecutionState.Error;

+ 3 - 0
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -807,18 +807,21 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
     {
         softSelectedStructureMembers.Add(member);
         Internals.ChangeController.MembersSelectedInlet(GetSelectedMembers());
+        OnPropertyChanged(nameof(SoftSelectedStructureMembers));
     }
 
     public void RemoveSoftSelectedMember(IStructureMemberHandler member)
     {
         softSelectedStructureMembers.Remove(member);
         Internals.ChangeController.MembersSelectedInlet(GetSelectedMembers());
+        OnPropertyChanged(nameof(SoftSelectedStructureMembers));
     }
 
     public void ClearSoftSelectedMembers()
     {
         softSelectedStructureMembers.Clear();
         Internals.ChangeController.MembersSelectedInlet(GetSelectedMembers());
+        OnPropertyChanged(nameof(SoftSelectedStructureMembers));
     }
 
     #endregion

+ 2 - 2
src/PixiEditor/ViewModels/SubViewModels/ToolsViewModel.cs

@@ -504,7 +504,7 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
 
     private void DocumentOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
     {
-        if (e.PropertyName == nameof(DocumentViewModel.SelectedStructureMember))
+        if (e.PropertyName is nameof(DocumentViewModel.SelectedStructureMember) or nameof(DocumentViewModel.SoftSelectedStructureMembers))
         {
             UpdateEnabledState();
         }
@@ -530,7 +530,7 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
                     doc.SelectedStructureMember
                 };
 
-                selectedLayers.AddRange(doc.SoftSelectedStructureMembers);
+                selectedLayers.AddRange(doc.SoftSelectedStructureMembers.Except(selectedLayers));
                 tool.SelectedLayersChanged(selectedLayers.ToArray());
             }
         }

+ 11 - 6
src/PixiEditor/ViewModels/Tools/ToolViewModel.cs

@@ -77,9 +77,9 @@ internal abstract class ToolViewModel : ObservableObject, IToolHandler
             OnPropertyChanged(nameof(ActionDisplay));
         }
     }
-    
+
     public string IconOverwrite { get; set; }
-    
+
     public string IconToUse => IconOverwrite ?? DefaultIcon;
 
     private bool isActive;
@@ -110,6 +110,11 @@ internal abstract class ToolViewModel : ObservableObject, IToolHandler
         if (layers.Length is > 1 or 0)
         {
             CanBeUsedOnActiveLayer = SupportedLayerTypes == null;
+            if (IsActive)
+            {
+                OnSelectedLayersChanged(layers);
+            }
+
             return;
         }
 
@@ -151,7 +156,7 @@ internal abstract class ToolViewModel : ObservableObject, IToolHandler
     public virtual void ModifierKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown) { }
 
     public virtual void UseTool(VecD pos) { }
-    
+
     protected virtual void OnSelected(bool restoring) { }
 
     public void OnToolSelected(bool restoring)
@@ -179,7 +184,7 @@ internal abstract class ToolViewModel : ObservableObject, IToolHandler
     protected virtual void OnDeselecting(bool transient)
     {
     }
-    
+
     public virtual void OnPostUndo() { }
     public virtual void OnPostRedo() { }
     public virtual void OnActiveFrameChanged(int newFrame) { }
@@ -209,8 +214,8 @@ internal abstract class ToolViewModel : ObservableObject, IToolHandler
         {
             toolbarSetting.ResetOverwrite();
         }
-        
-        if(toolset.IconOverwrites.TryGetValue(this, out var icon))
+
+        if (toolset.IconOverwrites.TryGetValue(this, out var icon))
         {
             IconOverwrite = icon;
         }

+ 3 - 3
src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs

@@ -100,7 +100,7 @@ internal class MoveToolViewModel : ToolViewModel, IMoveToolHandler
     {
         if (IsActive)
         {
-            OnSelected(false);
+           OnToolSelected(false);
         }
     }
 
@@ -108,7 +108,7 @@ internal class MoveToolViewModel : ToolViewModel, IMoveToolHandler
     {
         if (IsActive)
         {
-            OnSelected(false);
+            OnToolSelected(false);
         }
     }
 
@@ -124,7 +124,7 @@ internal class MoveToolViewModel : ToolViewModel, IMoveToolHandler
 
     private void UpdateSelection()
     {
-        OnDeselecting(false);
+        OnToolDeselected(false);
         OnToolSelected(false);
     }