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");