diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/.classpath b/ diy-layout-creator --username bancika@gmail.com/Library/.classpath new file mode 100644 index 00000000..cba71c5e --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/.project b/ diy-layout-creator --username bancika@gmail.com/Library/.project new file mode 100644 index 00000000..18f823d0 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/.project @@ -0,0 +1,17 @@ + + + Library + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar new file mode 100644 index 00000000..f3a83528 Binary files /dev/null and b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractLeadedDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractLeadedDIYComponent.java new file mode 100644 index 00000000..dd3c7b1a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractLeadedDIYComponent.java @@ -0,0 +1,182 @@ +package org.diylc.components; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; + +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.Project; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.utils.Constants; + +/** + * Base class for all leaded components such as resistors or capacitors. Has two + * control points and draws leads between them. Also, it positions and draws the + * shape of the component as specified by a child class. + * + * @author Branislav Stojkovic + */ +public abstract class AbstractLeadedDIYComponent implements IDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Color LEAD_COLOR = Color.black; + public static Color LABEL_COLOR = Color.black; + public static Color LABEL_COLOR_SELECTED = Color.red; + + protected Size width; + protected Size height; + protected Point[] points = new Point[] { new Point(0, 0), + new Point((int) (Constants.GRID * 10), 0) }; + protected String name = "New Component"; + + protected AbstractLeadedDIYComponent() { + super(); + try { + this.width = getDefaultWidth().clone(); + this.height = getDefaultHeight().clone(); + } catch (CloneNotSupportedException e) { + // This should never happen because Size supports cloning. + } + } + + /** + * @return default component width. + */ + protected abstract Size getDefaultWidth(); + + /** + * Returns default component height. + * + * @return + */ + protected abstract Size getDefaultHeight(); + + /** + * @return shape that represents component body. Shape should not be + * transformed and should be referenced to (0, 0). + */ + protected abstract Shape getComponentShape(); + + /** + * @return component body color. + */ + protected abstract Color getBodyColor(); + + /** + * @return component border color. + */ + protected abstract Color getBorderColor(); + + @Override + public int getControlPointCount() { + return points.length; + } + + @Override + public Point getControlPoint(int index) { + return (Point) points[index].clone(); + } + + @Override + public void setControlPoint(Point point, int index) { + points[index].setLocation(point); + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + g2d.setColor(LEAD_COLOR); + g2d.setStroke(new BasicStroke(1)); + double distance = points[0].distance(points[1]); + Shape shape = getComponentShape(); + Rectangle shapeRect = shape.getBounds(); + double leadLenght = (distance - shapeRect.width) / 2; + Double theta; + theta = Math.atan2(points[1].y - points[0].y, points[1].x - points[0].x); + // Draw leads. + g2d.drawLine(points[0].x, points[0].y, (int) (points[0].x + leadLenght * Math.cos(theta)), + (int) (points[0].y + leadLenght * Math.sin(theta))); + g2d.drawLine(points[1].x, points[1].y, (int) (points[1].x - leadLenght * Math.cos(theta)), + (int) (points[1].y - leadLenght * Math.sin(theta))); + // Transform graphics to draw the body in the right place and at the + // right angle. + g2d.translate((points[0].x + points[1].x - shapeRect.width) / 2, + (points[0].y + points[1].y - shapeRect.height) / 2); + g2d.rotate(theta, shapeRect.width / 2, shapeRect.height / 2); + // Draw body. + if (componentState != ComponentState.DRAGGING) { + g2d.setColor(getBodyColor()); + g2d.fill(shape); + } + g2d.setColor(getBorderColor()); + g2d.draw(shape); + // Draw label. + g2d.setFont(Constants.LABEL_FONT); + g2d + .setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED + : LABEL_COLOR); + FontMetrics fontMetrics = g2d.getFontMetrics(g2d.getFont()); + java.awt.geom.Rectangle2D textRect = fontMetrics.getStringBounds(getName(), g2d); + g2d.drawString(getName(), (int) (shapeRect.width - textRect.getWidth()) / 2, + (int) (shapeRect.height - textRect.getHeight()) / 2 + fontMetrics.getAscent()); + } + + @EditableProperty(defaultable = false) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @EditableProperty(defaultable = true) + public Size getWidth() { + return width; + } + + public void setWidth(Size width) { + this.width = width; + } + + @EditableProperty(defaultable = true) + public Size getHeight() { + return height; + } + + public void setHeight(Size height) { + this.height = height; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @SuppressWarnings("unchecked") + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + AbstractLeadedDIYComponent other = (AbstractLeadedDIYComponent) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AxialFilmCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AxialFilmCapacitor.java new file mode 100644 index 00000000..046b2f54 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AxialFilmCapacitor.java @@ -0,0 +1,69 @@ +package org.diylc.components; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Rectangle2D; + +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.CapacitanceUnit; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Axial Film Capacitor", author = "bancika", category = "Passive", instanceNamePrefix = "C", desciption = "test") +public class AxialFilmCapacitor extends AbstractLeadedDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Size DEFAULT_WIDTH = new Size(1d / 2, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1d / 8, SizeUnit.in); + public static Color BODY_COLOR = Color.decode("#FFE303"); + public static Color BORDER_COLOR = BODY_COLOR.darker(); + + private Capacitance value = new Capacitance(123d, CapacitanceUnit.nF); + + public AxialFilmCapacitor() { + super(); + } + + @EditableProperty + public Capacitance getValue() { + return value; + } + + public void setValue(Capacitance value) { + this.value = value; + } + + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("C", 10, 10); + } + + @Override + protected Size getDefaultHeight() { + return DEFAULT_HEIGHT; + } + + @Override + protected Size getDefaultWidth() { + return DEFAULT_WIDTH; + } + + @Override + protected Color getBodyColor() { + return BODY_COLOR; + } + + @Override + protected Color getBorderColor() { + return BORDER_COLOR; + } + + @Override + protected Shape getComponentShape() { + return new Rectangle2D.Double(0f, 0f, getWidth().convertToPixels(), getHeight() + .convertToPixels()); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/DIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/DIL_IC.java new file mode 100644 index 00000000..175541ab --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/DIL_IC.java @@ -0,0 +1,206 @@ +package org.diylc.components; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.Rectangle2D; + +import org.diylc.common.Orientation; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.Project; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "DIL IC", author = "bancika", category = "Semiconductors", instanceNamePrefix = "IC", desciption = "test", stretchable = false) +public class DIL_IC implements IDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Color BODY_COLOR = Color.gray; + public static Color BORDER_COLOR = Color.black; + public static Color LABEL_COLOR = Color.white; + public static int EDGE_RADIUS = 6; + + private String name = "New Component"; + private String value = ""; + private Orientation orientation = Orientation.DEFAULT; + private PinCount pinCount = PinCount._8; + private Size rowSpacing = new Size(0.3d, SizeUnit.in); + private Point[] controlPoints = new Point[] { new Point(0, 0), + new Point(0, (int) Constants.GRID), new Point(0, (int) (2 * Constants.GRID)), + new Point(0, (int) (3 * Constants.GRID)), new Point((int) (3 * Constants.GRID), 0), + new Point((int) (3 * Constants.GRID), (int) Constants.GRID), + new Point((int) (3 * Constants.GRID), (int) (2 * Constants.GRID)), + new Point((int) (3 * Constants.GRID), (int) (3 * Constants.GRID)) }; + + @EditableProperty(defaultable = false) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @EditableProperty + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + } + + @EditableProperty(name = "Pins") + public PinCount getPinCount() { + return pinCount; + } + + public void setPinCount(PinCount pinCount) { + this.pinCount = pinCount; + updateControlPoints(); + } + + @EditableProperty(name = "Row spacing") + public Size getRowSpacing() { + return rowSpacing; + } + + public void setRowSpacing(Size rowSpacing) { + this.rowSpacing = rowSpacing; + updateControlPoints(); + } + + @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); + } + + private void updateControlPoints() { + Point firstPoint = controlPoints[0]; + controlPoints = new Point[pinCount.getValue()]; + controlPoints[0] = firstPoint; + int dx1; + int dy1; + int dx2; + int dy2; + for (int i = 0; i < pinCount.getValue() / 2; i++) { + switch (orientation) { + case DEFAULT: + dx1 = 0; + dy1 = (int) (i * Constants.GRID); + dx2 = rowSpacing.convertToPixels(); + dy2 = (int) (i * Constants.GRID); + break; + case _90: + dx1 = (int) (-i * Constants.GRID); + dy1 = 0; + dx2 = (int) (-i * Constants.GRID); + dy2 = rowSpacing.convertToPixels(); + break; + case _180: + dx1 = 0; + dy1 = (int) (-i * Constants.GRID); + dx2 = -rowSpacing.convertToPixels(); + dy2 = (int) (-i * Constants.GRID); + break; + case _270: + dx1 = (int) (i * Constants.GRID); + dy1 = 0; + dx2 = (int) (i * Constants.GRID); + dy2 = rowSpacing.convertToPixels(); + break; + default: + throw new RuntimeException("Unexpected orientation: " + orientation); + } + controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); + controlPoints[i + pinCount.getValue() / 2] = new Point(firstPoint.x + dx2, firstPoint.y + + dy2); + } + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + int x = controlPoints[0].x; + int y = controlPoints[0].y; + int width; + int height; + if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { + width = rowSpacing.convertToPixels(); + height = (int) ((pinCount.getValue() / 2) * Constants.GRID); + y -= (int) (Constants.GRID / 2); + } else { + width = (int) ((pinCount.getValue() / 2) * Constants.GRID); + height = rowSpacing.convertToPixels(); + x -= (int) (Constants.GRID / 2); + } + if (orientation == Orientation._90) { + x -= width - Constants.GRID; + } else if (orientation == Orientation._180) { + x -= rowSpacing.convertToPixels(); + y -= height - Constants.GRID; + } + if (componentState != ComponentState.DRAGGING) { + g2d.setColor(BODY_COLOR); + g2d.fillRoundRect(x, y, width, height, EDGE_RADIUS, EDGE_RADIUS); + } + g2d.setColor(BORDER_COLOR); + g2d.setStroke(new BasicStroke()); + g2d.drawRoundRect(x, y, width, height, EDGE_RADIUS, EDGE_RADIUS); + // Draw label. + g2d.setFont(Constants.LABEL_FONT); + g2d.setColor(componentState == ComponentState.DRAGGING ? BORDER_COLOR : LABEL_COLOR); + FontMetrics fontMetrics = g2d.getFontMetrics(g2d.getFont()); + Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d); + int textHeight = (int) (rect.getHeight()); + int textWidth = (int) (rect.getWidth()); + // Center text horizontally and vertically + x += (width - textWidth) / 2; + y += (height - textHeight) / 2 + fontMetrics.getAscent(); + g2d.drawString(getName(), x, y); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("IC", 10, 10); + } + + static enum PinCount { + + _4, _8, _10, _12, _14, _16, _24, _32; + + @Override + public String toString() { + return name().replace("_", ""); + } + + public int getValue() { + return Integer.parseInt(toString()); + } + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/MockDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/MockDIYComponent.java new file mode 100644 index 00000000..f0cd131a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/MockDIYComponent.java @@ -0,0 +1,127 @@ +package org.diylc.components; + +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.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.CapacitanceUnit; +import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.ResistanceUnit; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Mock", author = "bancika", category = "Sample", instanceNamePrefix = "M", desciption = "test") +public class MockDIYComponent implements IDIYComponent { + + private static final long serialVersionUID = 1L; + + private String testField = "Hello World"; + private Capacitance c = new Capacitance(100d, CapacitanceUnit.uF); + private Resistance r = new Resistance(123d, ResistanceUnit.K); + private Size s = new Size(1d, SizeUnit.cm); + private Color color = Color.green; + private Point leftTopCorner = new Point(0, 0); + private String name = "something"; + + public MockDIYComponent(String testField, Capacitance c, Resistance r, Size s, Color color, + Point leftTopCorner) { + super(); + this.testField = testField; + this.c = c; + this.r = r; + this.s = s; + this.color = color; + this.leftTopCorner = leftTopCorner; + } + + public MockDIYComponent() { + super(); + } + + @EditableProperty + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public Point getControlPoint(int index) { + return leftTopCorner; + } + + @Override + public void setControlPoint(Point point, int index) { + leftTopCorner.setLocation(point); + } + + @EditableProperty(name = "Test Field") + public String getTestField() { + return testField; + } + + public void setTestField(String testField) { + this.testField = testField; + } + + @EditableProperty(defaultable = true) + public Capacitance getValue() { + return c; + } + + public void setValue(Capacitance c) { + this.c = c; + } + + @EditableProperty(defaultable = true) + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @EditableProperty + public Resistance getR() { + return r; + } + + // Setter is commented out, ClassProcessor should ignore this property. + // public void setR(Resistance r) { + // this.r = r; + // } + + // No annotation, so this property should be ignored. + public Size getS() { + return s; + } + + public void setS(Size s) { + this.s = s; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + g2d.setColor(componentState.equals(ComponentState.SELECTED) ? color : color.darker()); + g2d.fillRect(leftTopCorner.x, leftTopCorner.y, 200, 50); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("X", 10, 10); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialCeramicDiskCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialCeramicDiskCapacitor.java new file mode 100644 index 00000000..e42a0d5b --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialCeramicDiskCapacitor.java @@ -0,0 +1,69 @@ +package org.diylc.components; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; + +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.CapacitanceUnit; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Ceramic Capacitor", author = "bancika", category = "Passive", instanceNamePrefix = "C", desciption = "test") +public class RadialCeramicDiskCapacitor extends AbstractLeadedDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Size DEFAULT_WIDTH = new Size(1d / 2, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1d / 8, SizeUnit.in); + public static Color BODY_COLOR = Color.decode("#F0E68C"); + public static Color BORDER_COLOR = BODY_COLOR.darker(); + + private Capacitance value = new Capacitance(123d, CapacitanceUnit.nF); + + public RadialCeramicDiskCapacitor() { + super(); + } + + @EditableProperty + public Capacitance getValue() { + return value; + } + + public void setValue(Capacitance value) { + this.value = value; + } + + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("C", 10, 10); + } + + @Override + protected Size getDefaultHeight() { + return DEFAULT_HEIGHT; + } + + @Override + protected Size getDefaultWidth() { + return DEFAULT_WIDTH; + } + + @Override + protected Color getBodyColor() { + return BODY_COLOR; + } + + @Override + protected Color getBorderColor() { + return BORDER_COLOR; + } + + @Override + protected Shape getComponentShape() { + return new Ellipse2D.Double(0f, 0f, getWidth().convertToPixels(), getHeight() + .convertToPixels()); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialFilmCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialFilmCapacitor.java new file mode 100644 index 00000000..0ebd4f67 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialFilmCapacitor.java @@ -0,0 +1,70 @@ +package org.diylc.components; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.RoundRectangle2D; + +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.CapacitanceUnit; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Radial Film Capacitor", author = "bancika", category = "Passive", instanceNamePrefix = "C", desciption = "test") +public class RadialFilmCapacitor extends AbstractLeadedDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Size DEFAULT_WIDTH = new Size(1d, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1d / 4, SizeUnit.in); + public static Color BODY_COLOR = Color.decode("#FF8000"); + public static Color BORDER_COLOR = BODY_COLOR.darker(); + + private Capacitance value = new Capacitance(123d, CapacitanceUnit.nF); + + public RadialFilmCapacitor() { + super(); + } + + @EditableProperty + public Capacitance getValue() { + return value; + } + + public void setValue(Capacitance value) { + this.value = value; + } + + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("C", 10, 10); + } + + @Override + protected Size getDefaultHeight() { + return DEFAULT_HEIGHT; + } + + @Override + protected Size getDefaultWidth() { + return DEFAULT_WIDTH; + } + + @Override + protected Color getBodyColor() { + return BODY_COLOR; + } + + @Override + protected Color getBorderColor() { + return BORDER_COLOR; + } + + @Override + protected Shape getComponentShape() { + double radius = getHeight().convertToPixels() * 0.7; + return new RoundRectangle2D.Double(0f, 0f, getWidth().convertToPixels(), getHeight() + .convertToPixels(), radius, radius); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/Resistor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/Resistor.java new file mode 100644 index 00000000..7fa93ada --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/Resistor.java @@ -0,0 +1,69 @@ +package org.diylc.components; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Rectangle2D; + +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.ResistanceUnit; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Resistor", author = "bancika", category = "Passive", instanceNamePrefix = "R", desciption = "test") +public class Resistor extends AbstractLeadedDIYComponent { + + private static final long serialVersionUID = 1L; + + public static Size DEFAULT_WIDTH = new Size(1d / 2, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1d / 8, SizeUnit.in); + public static Color BODY_COLOR = Color.decode("#82CFFD"); + public static Color BORDER_COLOR = BODY_COLOR.darker(); + + private Resistance value = new Resistance(123d, ResistanceUnit.K); + + public Resistor() { + super(); + } + + @EditableProperty + public Resistance getValue() { + return value; + } + + public void setValue(Resistance value) { + this.value = value; + } + + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.drawString("R", 10, 10); + } + + @Override + protected Size getDefaultHeight() { + return DEFAULT_HEIGHT; + } + + @Override + protected Size getDefaultWidth() { + return DEFAULT_WIDTH; + } + + @Override + protected Color getBodyColor() { + return BODY_COLOR; + } + + @Override + protected Color getBorderColor() { + return BORDER_COLOR; + } + + @Override + protected Shape getComponentShape() { + return new Rectangle2D.Double(0f, 0f, getWidth().convertToPixels(), getHeight() + .convertToPixels()); + } +}