Browse Source

Fixed group isvisible undo

flabbet 4 years ago
parent
commit
c5d1eebb3a

+ 2 - 1
PixiEditor/Models/Layers/GroupData.cs

@@ -1,4 +1,5 @@
-using System;
+using PixiEditor.Views.UserControls;
+using System;
 
 namespace PixiEditor.Models.Layers
 {

+ 2 - 2
PixiEditor/Views/UserControls/LayerGroupControl.xaml

@@ -27,8 +27,8 @@
                     <ColumnDefinition Width="*"/>
                 </Grid.ColumnDefinitions>
                 <CheckBox Style="{StaticResource ImageCheckBox}" VerticalAlignment="Center"
-                      IsThreeState="False" HorizontalAlignment="Center" 
-                      IsChecked="{Binding Path=IsVisibleUndoTriggerable, ElementName=groupControl}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"  Grid.Column="0" Height="16"/>
+                      IsThreeState="False" HorizontalAlignment="Center" Click="CheckBox_Checked"
+                      IsChecked="{Binding Path=IsVisibleUndoTriggerable, ElementName=groupControl}" Grid.Column="0" Height="16"/>
                 
                 <StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Left">
                     <Rectangle Width="{Binding Path=(helpers:TreeViewItemHelper.Indent).Value, Mode=OneWay, RelativeSource={RelativeSource AncestorType=ItemsPresenter}}" Fill="Transparent" StrokeThickness="0"/>

+ 33 - 17
PixiEditor/Views/UserControls/LayerGroupControl.xaml.cs

@@ -53,12 +53,12 @@ namespace PixiEditor.Views.UserControls
         private static void LayersViewModelCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
         {
             LayerGroupControl control = (LayerGroupControl)d;
-            if(e.OldValue is LayersViewModel oldVm && oldVm != e.NewValue)
+            if (e.OldValue is LayersViewModel oldVm && oldVm != e.NewValue)
             {
                 oldVm.Owner.BitmapManager.MouseController.StoppedRecordingChanges -= control.MouseController_StoppedRecordingChanges;
             }
 
-            if(e.NewValue is LayersViewModel vm)
+            if (e.NewValue is LayersViewModel vm)
             {
                 vm.Owner.BitmapManager.MouseController.StoppedRecordingChanges += control.MouseController_StoppedRecordingChanges;
             }
@@ -206,12 +206,7 @@ namespace PixiEditor.Views.UserControls
 
         private void CheckBox_Checked(object sender, RoutedEventArgs e)
         {
-            HandleCheckboxChange(true);
-        }
-
-        private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
-        {
-            HandleCheckboxChange(false);
+            HandleCheckboxChange(((CheckBox)e.OriginalSource).IsChecked.Value);
         }
 
         private void HandleCheckboxChange(bool value)
@@ -220,22 +215,43 @@ namespace PixiEditor.Views.UserControls
             {
                 var doc = LayersViewModel.Owner.BitmapManager.ActiveDocument;
 
-                doc.LayerStructure.GetGroupByGuid(GroupGuid).IsVisible = value;
+                IsVisibleUndoTriggerable = value;
+
+                var processArgs = new object[] { GroupGuid, value };
+                var reverseProcessArgs = new object[] { GroupGuid, !value };
+
+                ChangeGroupVisibilityProcess(processArgs);
 
-                var layers = doc.LayerStructure.GetGroupLayers(GroupData);
+                doc.UndoManager.AddUndoChange(
+                new Change(
+                    ChangeGroupVisibilityProcess,
+                    reverseProcessArgs,
+                    ChangeGroupVisibilityProcess,
+                    processArgs,
+                    $"Change {GroupName} visibility"), false);
+            }
+        }
+
+        private void ChangeGroupVisibilityProcess(object[] args)
+        {
+            var doc = LayersViewModel.Owner.BitmapManager.ActiveDocument;
+            if (args.Length == 2 &&
+                args[0] is Guid groupGuid &&
+                args[1] is bool value
+                && doc != null)
+            {
+
+                var group = doc.LayerStructure.GetGroupByGuid(groupGuid);
+
+                group.IsVisible = value;
+                var layers = doc.LayerStructure.GetGroupLayers(group);
 
                 foreach (var layer in layers)
                 {
                     layer.RaisePropertyChange(nameof(layer.IsVisible));
                 }
 
-                doc.UndoManager.AddUndoChange(
-                new Change(
-                    nameof(IsVisibleUndoTriggerable),
-                    !value,
-                    value,
-                    $"Change {GroupName} visibility",
-                    this), true) //wip, doesn't work
+                IsVisibleUndoTriggerable = value;
             }
         }
     }

+ 1 - 1
PixiEditor/Views/UserControls/LayersManager.xaml

@@ -66,7 +66,7 @@
                 </TreeView.ItemsPanel>
                 <TreeView.Resources>
                     <HierarchicalDataTemplate DataType="{x:Type layers:LayerGroup}" ItemsSource="{Binding Items}">
-                    <local:LayerGroupControl GroupName="{Binding Name}" LayersViewModel="{Binding LayerCommandsViewModel, ElementName=layersManager}" GroupGuid="{Binding GroupGuid}" GroupData="{Binding StructureData}" MouseMove="LayerGroup_MouseMove"/>
+                    <local:LayerGroupControl GroupName="{Binding Name}" IsVisibleUndoTriggerable="{Binding StructureData.IsVisible}" LayersViewModel="{Binding LayerCommandsViewModel, ElementName=layersManager}" GroupGuid="{Binding GroupGuid}" GroupData="{Binding StructureData}" MouseMove="LayerGroup_MouseMove"/>
                     </HierarchicalDataTemplate>
                     <DataTemplate DataType="{x:Type layers:Layer}">
                         <local:LayerStructureItemContainer