Browse Source

Changed Toolbar.GetSetting<T> method. T is now type of setting, not the settting`s value

ArtemK123 4 years ago
parent
commit
db2d50530a

+ 4 - 3
PixiEditor/Models/Controllers/BitmapManager.cs

@@ -12,6 +12,7 @@ using PixiEditor.Models.ImageManipulation;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Tools;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 
 namespace PixiEditor.Models.Controllers
 {
@@ -45,12 +46,12 @@ namespace PixiEditor.Models.Controllers
 
         public int ToolSize
         {
-            get => SelectedTool.Toolbar.GetSetting<int>("ToolSize") != null
-            ? SelectedTool.Toolbar.GetSetting<int>("ToolSize").Value
+            get => SelectedTool.Toolbar.GetSetting<SizeSetting>("ToolSize") != null
+            ? SelectedTool.Toolbar.GetSetting<SizeSetting>("ToolSize").Value
             : 1;
             set
             {
-                if (SelectedTool.Toolbar.GetSetting<int>("ToolSize") is var toolSize)
+                if (SelectedTool.Toolbar.GetSetting<SizeSetting>("ToolSize") is var toolSize)
                 {
                     toolSize.Value = value;
                     HighlightPixels(MousePositionConverter.CurrentCoordinates);

+ 4 - 3
PixiEditor/Models/Tools/ToolSettings/Toolbars/Toolbar.cs

@@ -22,15 +22,16 @@ namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
         }
 
         /// <summary>
-        ///     Gets setting with given type T in toolbar by name.
+        ///     Gets setting of given type T in toolbar by name.
         /// </summary>
         /// <param name="name">Setting name, non case sensitive</param>
         /// <returns></returns>
-        public Setting<T> GetSetting<T>(string name)
+        public T GetSetting<T>(string name)
+            where T : Setting
         {
             Setting setting =  Settings.FirstOrDefault(currentSetting => string.Equals(currentSetting.Name, name, StringComparison.CurrentCultureIgnoreCase));
 
-            if (setting == null || !(setting is Setting<T> convertedSetting))
+            if (setting == null || !(setting is T convertedSetting))
                 return null;
 
             return convertedSetting;

+ 4 - 3
PixiEditor/Models/Tools/Tools/BrightnessTool.cs

@@ -8,6 +8,7 @@ using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Enums;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 
 namespace PixiEditor.Models.Tools.Tools
@@ -34,9 +35,9 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            int toolSize = Toolbar.GetSetting<int>("ToolSize").Value;
-            float correctionFactor = Toolbar.GetSetting<float>("CorrectionFactor").Value;
-            Enum.TryParse<BrightnessMode>(Toolbar.GetSetting<ComboBoxItem>("Mode")?.Value?.Content as string, out var mode);
+            int toolSize = Toolbar.GetSetting<SizeSetting>("ToolSize").Value;
+            float correctionFactor = Toolbar.GetSetting<FloatSetting>("CorrectionFactor").Value;
+            Enum.TryParse((Toolbar.GetSetting<DropdownSetting>("Mode")?.Value as ComboBoxItem)?.Content as string, out BrightnessMode mode);
             Mode = mode;
 
             LayerChange[] layersChanges = new LayerChange[1];

+ 4 - 5
PixiEditor/Models/Tools/Tools/CircleTool.cs

@@ -1,13 +1,12 @@
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Linq;
-using System.Numerics;
 using System.Windows.Media;
 using PixiEditor.Helpers.Extensions;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 
 namespace PixiEditor.Models.Tools.Tools
 {
@@ -22,13 +21,13 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            int thickness = Toolbar.GetSetting<int>("ToolSize").Value;
+            int thickness = Toolbar.GetSetting<SizeSetting>("ToolSize").Value;
             DoubleCords fixedCoordinates = CalculateCoordinatesForShapeRotation(coordinates[^1], coordinates[0]);
             IEnumerable<Coordinates> outline = CreateEllipse(fixedCoordinates.Coords1, fixedCoordinates.Coords2, thickness);
             BitmapPixelChanges pixels = BitmapPixelChanges.FromSingleColoredArray(outline, color);
-            if (Toolbar.GetSetting<bool>("Fill").Value)
+            if (Toolbar.GetSetting<BoolSetting>("Fill").Value)
             {
-                Color fillColor = Toolbar.GetSetting<Color>("FillColor").Value;
+                Color fillColor = Toolbar.GetSetting<ColorSetting>("FillColor").Value;
                 pixels.ChangedPixels.AddRangeNewOnly(
                     BitmapPixelChanges.FromSingleColoredArray(CalculateFillForEllipse(outline), fillColor)
                         .ChangedPixels);

+ 2 - 1
PixiEditor/Models/Tools/Tools/EraserTool.cs

@@ -2,6 +2,7 @@
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 
 namespace PixiEditor.Models.Tools.Tools
@@ -18,7 +19,7 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            return Erase(layer, coordinates, Toolbar.GetSetting<int>("ToolSize").Value);
+            return Erase(layer, coordinates, Toolbar.GetSetting<SizeSetting>("ToolSize").Value);
         }
 
         public LayerChange[] Erase(Layer layer, Coordinates[] coordinates, int toolSize)

+ 3 - 4
PixiEditor/Models/Tools/Tools/LineTool.cs

@@ -1,12 +1,11 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.Linq;
 using System.Windows.Media;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Enums;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
-using PixiEditor.Models.Tools.ToolSettings;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 
 namespace PixiEditor.Models.Tools.Tools
@@ -26,7 +25,7 @@ namespace PixiEditor.Models.Tools.Tools
             var pixels =
                 BitmapPixelChanges.FromSingleColoredArray(
                     CreateLine(coordinates, 
-                        Toolbar.GetSetting<int>("ToolSize").Value, CapType.Square, CapType.Square), color);
+                        Toolbar.GetSetting<SizeSetting>("ToolSize").Value, CapType.Square, CapType.Square), color);
             return Only(pixels, layer);
         }
 

+ 2 - 2
PixiEditor/Models/Tools/Tools/PenTool.cs

@@ -11,14 +11,14 @@ namespace PixiEditor.Models.Tools.Tools
     public class PenTool : BitmapOperationTool
     {
         public override ToolType ToolType => ToolType.Pen;
-        private readonly Setting<int> _toolSizeSetting;
+        private readonly SizeSetting _toolSizeSetting;
 
         public PenTool()
         {
             Cursor = Cursors.Pen;
             Tooltip = "Standard brush (B)";
             Toolbar = new BasicToolbar();
-            _toolSizeSetting = Toolbar.GetSetting<int>("ToolSize");
+            _toolSizeSetting = Toolbar.GetSetting<SizeSetting>("ToolSize");
         }
 
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)

+ 4 - 3
PixiEditor/Models/Tools/Tools/RectangleTool.cs

@@ -6,6 +6,7 @@ using PixiEditor.Helpers.Extensions;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 
 namespace PixiEditor.Models.Tools.Tools
 {
@@ -21,12 +22,12 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         {
-            int thickness = Toolbar.GetSetting<int>("ToolSize").Value;
+            int thickness = Toolbar.GetSetting<SizeSetting>("ToolSize").Value;
             BitmapPixelChanges pixels =
                 BitmapPixelChanges.FromSingleColoredArray(CreateRectangle(coordinates, thickness), color);
-            if (Toolbar.GetSetting<bool>("Fill").Value)
+            if (Toolbar.GetSetting<BoolSetting>("Fill").Value)
             {
-                Color fillColor = Toolbar.GetSetting<Color>("FillColor").Value;
+                Color fillColor = Toolbar.GetSetting<ColorSetting>("FillColor").Value;
                 pixels.ChangedPixels.AddRangeOverride(
                     BitmapPixelChanges.FromSingleColoredArray
                             (CalculateFillForRectangle(coordinates[^1], coordinates[0], thickness), fillColor)

+ 2 - 1
PixiEditor/Models/Tools/Tools/SelectTool.cs

@@ -7,6 +7,7 @@ using PixiEditor.Models.Controllers;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Enums;
 using PixiEditor.Models.Position;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 using PixiEditor.ViewModels;
 
@@ -26,7 +27,7 @@ namespace PixiEditor.Models.Tools.Tools
 
         public override void OnMouseDown(MouseEventArgs e)
         {
-            Enum.TryParse(Toolbar.GetSetting<ComboBoxItem>("Mode")?.Value?.Content as string, out SelectionType);
+            Enum.TryParse((Toolbar.GetSetting<DropdownSetting>("Mode")?.Value as ComboBoxItem)?.Content as string, out SelectionType);
 
             _oldSelection = null;
             if (ViewModelMain.Current.ActiveSelection != null &&

+ 7 - 7
PixiEditorTests/ModelsTests/ToolsTests/ToolbarTests/ToolbarBaseTests.cs

@@ -29,7 +29,7 @@ namespace PixiEditorTests.ModelsTests.ToolsTests.ToolbarTests
             BasicToolbar toolbar = new BasicToolbar();
             toolbar.Settings.Add(expected);
 
-            Setting<bool> actual = toolbar.GetSetting<bool>(settingName);
+            BoolSetting actual = toolbar.GetSetting<BoolSetting>(settingName);
 
             Assert.Equal(expected.Value, actual.Value);
         }
@@ -39,19 +39,19 @@ namespace PixiEditorTests.ModelsTests.ToolsTests.ToolbarTests
         {
             BasicToolbar toolbar = new BasicToolbar();
 
-            Setting<bool> actual = toolbar.GetSetting<bool>("invalid");
+            BoolSetting actual = toolbar.GetSetting<BoolSetting>("invalid");
 
             Assert.Null(actual);
         }
 
         [StaFact]
-        public void TestThatGenericGetSettingReturnsNullWhenSettingHasValueWithWrongType()
+        public void TestThatGenericGetSettingReturnsNullWhenSettingHasWrongType()
         {
             const string settingName = "test";
             BasicToolbar toolbar = new BasicToolbar();
             toolbar.Settings.Add(new BoolSetting(settingName));
 
-            Setting<int> actual = toolbar.GetSetting<int>(settingName);
+            SizeSetting actual = toolbar.GetSetting<SizeSetting>(settingName);
 
             Assert.Null(actual);
         }
@@ -61,17 +61,17 @@ namespace PixiEditorTests.ModelsTests.ToolsTests.ToolbarTests
         {
             BasicToolbar toolbar = new BasicToolbar();
 
-            toolbar.GetSetting<int>("ToolSize").Value = 5;
+            toolbar.GetSetting<SizeSetting>("ToolSize").Value = 5;
 
             toolbar.SaveToolbarSettings();
 
             BasicShapeToolbar shapeToolbar = new BasicShapeToolbar();
 
-            Assert.NotEqual(5, shapeToolbar.GetSetting<int>("ToolSize").Value);
+            Assert.NotEqual(5, shapeToolbar.GetSetting<SizeSetting>("ToolSize").Value);
 
             shapeToolbar.LoadSharedSettings();
 
-            Assert.Equal(5, shapeToolbar.GetSetting<int>("ToolSize").Value);
+            Assert.Equal(5, shapeToolbar.GetSetting<SizeSetting>("ToolSize").Value);
         }
     }
 }