diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/.classpath b/ diy-layout-creator --username bancika@gmail.com/Library/.classpath
index cba71c5e..74a976b1 100644
--- a/ diy-layout-creator --username bancika@gmail.com/Library/.classpath
+++ b/ diy-layout-creator --username bancika@gmail.com/Library/.classpath
@@ -2,6 +2,6 @@
-
+
diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractBoard.java
new file mode 100644
index 00000000..e26fcc19
--- /dev/null
+++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractBoard.java
@@ -0,0 +1,73 @@
+package org.diylc.components;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Point;
+
+import org.diylc.core.ComponentState;
+import org.diylc.core.IDIYComponent;
+import org.diylc.core.Project;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.utils.Constants;
+
+public abstract class AbstractBoard implements IDIYComponent {
+
+ private static final long serialVersionUID = 1L;
+
+ protected String name;
+ protected String value;
+ protected Point[] controlPoints = new Point[] { new Point(0, 0),
+ new Point((int) (10 * Constants.GRID), (int) (10 * Constants.GRID)) };
+
+ protected abstract Color getBoardColor();
+
+ protected abstract Color getBorderColor();
+
+ @Override
+ public void draw(Graphics2D g2d, ComponentState componentState, Project project) {
+ g2d.setStroke(new BasicStroke());
+ g2d.setColor(getBoardColor());
+ g2d.fillRect(controlPoints[0].x, controlPoints[0].y, controlPoints[1].x
+ - controlPoints[0].x, controlPoints[1].y - controlPoints[0].y);
+ g2d.setColor(getBorderColor());
+ g2d.drawRect(controlPoints[0].x, controlPoints[0].y, controlPoints[1].x
+ - controlPoints[0].x, controlPoints[1].y - controlPoints[0].y);
+ }
+
+ @Override
+ public int getControlPointCount() {
+ return controlPoints.length;
+ }
+
+ @Override
+ public Point getControlPoint(int index) {
+ return controlPoints[index];
+ }
+
+ @Override
+ public void setControlPoint(Point point, int index) {
+ controlPoints[index].setLocation(point);
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @EditableProperty
+ @Override
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/BlankBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/BlankBoard.java
new file mode 100644
index 00000000..30a5bc7e
--- /dev/null
+++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/BlankBoard.java
@@ -0,0 +1,31 @@
+package org.diylc.components;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+
+import org.diylc.core.ComponentLayer;
+import org.diylc.core.annotations.ComponentDescriptor;
+
+@ComponentDescriptor(name = "Blank Board", category = "Boards", author = "Branislav Stojkovic", componentLayer = ComponentLayer.BOARD, instanceNamePrefix = "B", desciption = "Blank FR4 board")
+public class BlankBoard extends AbstractBoard {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Color BOARD_COLOR = Color.decode("#BCED91");
+ public static Color BORDER_COLOR = BOARD_COLOR.darker();
+
+ @Override
+ protected Color getBoardColor() {
+ return BOARD_COLOR;
+ }
+
+ @Override
+ protected Color getBorderColor() {
+ return BORDER_COLOR;
+ }
+
+ @Override
+ public void drawIcon(Graphics2D g2d, int width, int height) {
+
+ }
+}
diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/PerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/PerfBoard.java
new file mode 100644
index 00000000..03755921
--- /dev/null
+++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/PerfBoard.java
@@ -0,0 +1,58 @@
+package org.diylc.components;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Point;
+
+import org.diylc.core.ComponentLayer;
+import org.diylc.core.ComponentState;
+import org.diylc.core.Project;
+import org.diylc.core.annotations.ComponentDescriptor;
+import org.diylc.core.measures.Size;
+import org.diylc.core.measures.SizeUnit;
+
+@ComponentDescriptor(name = "Perf Board", category = "Boards", author = "Branislav Stojkovic", componentLayer = ComponentLayer.BOARD, instanceNamePrefix = "B", desciption = "Perforated FR4 board with solder pads spaced 0.1 inch apart")
+public class PerfBoard extends AbstractBoard {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Color BOARD_COLOR = Color.decode("#BCED91");
+ public static Color COPPER_COLOR = Color.decode("#B87333");
+ public static Color BORDER_COLOR = BOARD_COLOR.darker();
+
+ private static Size SPACING = new Size(0.1d, SizeUnit.in);
+ private static Size PAD_SIZE = new Size(0.06d, SizeUnit.in);
+
+ @Override
+ public void draw(Graphics2D g2d, ComponentState componentState, Project project) {
+ super.draw(g2d, componentState, project);
+ Point p = new Point(controlPoints[0]);
+ int radius = PAD_SIZE.convertToPixels() / 2;
+ g2d.setStroke(new BasicStroke(radius));
+ g2d.setColor(COPPER_COLOR);
+ while (p.y < controlPoints[1].y - SPACING.convertToPixels()) {
+ p.x = controlPoints[0].x;
+ p.y += SPACING.convertToPixels();
+ while (p.x < controlPoints[1].x - SPACING.convertToPixels()) {
+ p.x += SPACING.convertToPixels();
+ g2d.drawOval(p.x - radius, p.y - radius, radius * 2, radius * 2);
+ }
+ }
+ }
+
+ @Override
+ protected Color getBoardColor() {
+ return BOARD_COLOR;
+ }
+
+ @Override
+ protected Color getBorderColor() {
+ return BORDER_COLOR;
+ }
+
+ @Override
+ public void drawIcon(Graphics2D g2d, int width, int height) {
+
+ }
+}