Browse Source

Fixed tool action display not updating

CPKreuz 4 years ago
parent
commit
334853f854

+ 7 - 2
PixiEditor/Models/Controllers/BitmapManager.cs

@@ -40,6 +40,8 @@ namespace PixiEditor.Models.Controllers
 
 
         public event EventHandler<DocumentChangedEventArgs> DocumentChanged;
         public event EventHandler<DocumentChangedEventArgs> DocumentChanged;
 
 
+        public event EventHandler<SelectedToolEventArgs> SelectedToolChanged;
+
         public MouseMovementController MouseController { get; set; }
         public MouseMovementController MouseController { get; set; }
 
 
         public Tool SelectedTool
         public Tool SelectedTool
@@ -47,8 +49,11 @@ namespace PixiEditor.Models.Controllers
             get => selectedTool;
             get => selectedTool;
             private set
             private set
             {
             {
-                selectedTool = value;
-                RaisePropertyChanged("SelectedTool");
+                Tool previousTool = selectedTool;
+                if (SetProperty(ref selectedTool, value))
+                {
+                    SelectedToolChanged?.Invoke(this, new SelectedToolEventArgs(previousTool, value));
+                }
             }
             }
         }
         }
 
 

+ 22 - 0
PixiEditor/Models/Events/SelectedToolEventArgs.cs

@@ -0,0 +1,22 @@
+using PixiEditor.Models.Tools;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PixiEditor.Models.Events
+{
+    public class SelectedToolEventArgs
+    {
+        public SelectedToolEventArgs(Tool oldTool, Tool newTool)
+        {
+            OldTool = oldTool;
+            NewTool = newTool;
+        }
+
+        public Tool OldTool { get; set; }
+
+        public Tool NewTool { get; set; }
+    }
+}

+ 22 - 1
PixiEditor/ViewModels/ViewModelMain.cs

@@ -230,7 +230,7 @@ namespace PixiEditor.ViewModels
 
 
             BitmapManager.PrimaryColor = ColorsSubViewModel.PrimaryColor;
             BitmapManager.PrimaryColor = ColorsSubViewModel.PrimaryColor;
 
 
-            BitmapManager.AddPropertyChangedCallback(nameof(BitmapManager.SelectedTool), () => { if (!OverrideActionDisplay) RaisePropertyChanged(nameof(ActionDisplay)); });
+            BitmapManager.SelectedToolChanged += BitmapManager_SelectedToolChanged;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -258,6 +258,27 @@ namespace PixiEditor.ViewModels
             ((CancelEventArgs)property).Cancel = !RemoveDocumentsWithSaveConfirmation();
             ((CancelEventArgs)property).Cancel = !RemoveDocumentsWithSaveConfirmation();
         }
         }
 
 
+        private void BitmapManager_SelectedToolChanged(object sender, SelectedToolEventArgs e)
+        {
+            e.OldTool.PropertyChanged -= SelectedTool_PropertyChanged;
+            e.NewTool.PropertyChanged += SelectedTool_PropertyChanged;
+
+            NotifyToolActionDisplayChanged();
+        }
+
+        private void SelectedTool_PropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            if (e.PropertyName == nameof(Tool.ActionDisplay))
+            {
+                NotifyToolActionDisplayChanged();
+            }
+        }
+
+        private void NotifyToolActionDisplayChanged()
+        {
+            if (!OverrideActionDisplay) RaisePropertyChanged(nameof(ActionDisplay));
+        }
+
         [Conditional("DEBUG")]
         [Conditional("DEBUG")]
         private void AddDebugOnlyViewModels()
         private void AddDebugOnlyViewModels()
         {
         {