diff --git a/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj b/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj index 909ea16..db938c3 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj +++ b/Advanced Software Engineering/Advanced Software Engineering/Advanced Software Engineering.csproj @@ -72,6 +72,7 @@ + diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/PenColor.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/PenColor.cs new file mode 100644 index 0000000..b498f54 --- /dev/null +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/DrawingVerbs/PenColor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Advanced_Software_Engineering { + class PenColor : Verb { + + Drawer drawer; + Color color; + + public PenColor(Drawer drawer, Color color) { + this.drawer = drawer; + this.color = color; + } + + public void ExecuteVerb() { + drawer.SetPenColor(color); + } + + public string GetDescription() { + return "Set pen color to: " + color.ToString(); + } + } +} diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value.cs index 38c707e..9b0189b 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value.cs @@ -21,5 +21,38 @@ namespace Advanced_Software_Engineering { public static Point ConvertToPoint(string text1, string text2) { return new Point(ConvertToInt(text1), ConvertToInt(text2)); } + + //TODO: Make unit tests for this function + public static Color TextToColor(string text) { + Color color = Color.FromName(text); + if (color.IsKnownColor) return color; + + + if (text.StartsWith("#")) + text = text.Substring(1); + + + switch (text.Length) { + case 6: + return Color.FromArgb( + int.Parse(text.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(text.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(text.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)); + + case 8: + return Color.FromArgb( + int.Parse(text.Substring(6, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(text.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(text.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), + int.Parse(text.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)); + + default: + throw new Exception("Color not valid"); + } + } + + public static Color IntsToColor(int r, int g, int b, int a = 0) { + return Color.FromArgb(a, r, g, b); + } } } diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs index 3974bf8..a209ef0 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs @@ -144,8 +144,11 @@ namespace Advanced_Software_Engineering { } else throw new Exception("Command doesn't take parameters"); case "pen": + if(parameters.Length == 1) { + return new PenColor(drawer, Value.TextToColor(parameters[0])); + } else throw new Exception("Command has an incorrect number of parameters"); case "fill": - throw new Exception("Not implemented"); + default: throw new Exception("Command not found");