From 746b7d4e975df26bac95d9deaf88bfe4a36b125f Mon Sep 17 00:00:00 2001 From: bancika Date: Sat, 8 Jan 2011 14:02:21 +0000 Subject: [PATCH] reorganized packages added toggle switch --- .../Library/lib/diylc.jar | Bin 223913 -> 226435 bytes .../AbstractLeadedDIYComponent.java | 182 ----------------- .../{ => boards}/AbstractBoard.java | 2 +- .../components/{ => boards}/BlankBoard.java | 2 +- .../components/{ => boards}/PerfBoard.java | 2 +- .../electromechanical/MiniToggleSwitch.java | 192 ++++++++++++++++++ .../electromechanical/ToggleSwitchType.java | 11 + .../{ => passive}/AxialFilmCapacitor.java | 3 +- .../RadialCeramicDiskCapacitor.java | 3 +- .../{ => passive}/RadialFilmCapacitor.java | 3 +- .../components/{ => passive}/Resistor.java | 3 +- .../{ => semiconductors}/DIL_IC.java | 2 +- 12 files changed, 215 insertions(+), 190 deletions(-) delete mode 100644 diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractLeadedDIYComponent.java rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => boards}/AbstractBoard.java (94%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => boards}/BlankBoard.java (92%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => boards}/PerfBoard.java (96%) create mode 100644 diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java create mode 100644 diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/ToggleSwitchType.java rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => passive}/AxialFilmCapacitor.java (91%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => passive}/RadialCeramicDiskCapacitor.java (91%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => passive}/RadialFilmCapacitor.java (91%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => passive}/Resistor.java (91%) rename diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/{ => semiconductors}/DIL_IC.java (95%) 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 index 24f2cd2bc3003107e9866673c18ae8b19132c259..687a85bdf6a50d556cbe19ef1cc03f1aee6d9773 100644 GIT binary patch delta 21477 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 delta 18768 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 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((int) (-Constants.GRID * 5), 0), - new Point((int) (Constants.GRID * 5), 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/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java similarity index 94% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AbstractBoard.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java index f35471fc..6201af16 100644 --- 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/boards/AbstractBoard.java @@ -1,4 +1,4 @@ -package org.diylc.components; +package org.diylc.components.boards; import java.awt.BasicStroke; import java.awt.Color; 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/boards/BlankBoard.java similarity index 92% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/BlankBoard.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/BlankBoard.java index 30a5bc7e..faf198ed 100644 --- 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/boards/BlankBoard.java @@ -1,4 +1,4 @@ -package org.diylc.components; +package org.diylc.components.boards; import java.awt.Color; import java.awt.Graphics2D; 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/boards/PerfBoard.java similarity index 96% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/PerfBoard.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/PerfBoard.java index 1281c2c1..c415cd9b 100644 --- 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/boards/PerfBoard.java @@ -1,4 +1,4 @@ -package org.diylc.components; +package org.diylc.components.boards; import java.awt.BasicStroke; import java.awt.Color; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java new file mode 100644 index 00000000..22b36124 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -0,0 +1,192 @@ +package org.diylc.components.electromechanical; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.RoundRectangle2D; + +import org.diylc.core.ComponentLayer; +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; + +@ComponentDescriptor(name = "Mini Toggle Switch", category = "Electromechanical", author = "Branislav Stojkovic", desciption = "", stretchable = false, componentLayer = ComponentLayer.COMPONENT, instanceNamePrefix = "SW") +public class MiniToggleSwitch implements IDIYComponent { + + private static final long serialVersionUID = 1L; + + private static Size SPACING = new Size(0.1d, SizeUnit.in); + private static Size MARGIN = new Size(0.08d, SizeUnit.in); + private static Size CIRCLE_SIZE = new Size(0.09d, SizeUnit.in); + private static Size LUG_WIDTH = new Size(0.065d, SizeUnit.in); + private static Size LUG_HEIGHT = new Size(0.03d, SizeUnit.in); + + private static Color BODY_COLOR = Color.decode("#3299CC"); + private static Color BORDER_COLOR = BODY_COLOR.darker(); + private static Color CIRCLE_COLOR = Color.red; + private static Color LUG_COLOR = Color.blue; + + protected Point[] controlPoints = new Point[] { new Point(0, 0) }; + protected RoundRectangle2D body; + protected String name; + protected ToggleSwitchType switchType = ToggleSwitchType.SPST; + + public MiniToggleSwitch() { + super(); + updateControlPoints(); + } + + private void updateControlPoints() { + Point firstPoint = controlPoints[0]; + int margin = MARGIN.convertToPixels(); + int spacing = SPACING.convertToPixels(); + switch (switchType) { + case SPST: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, + 2 * margin, 2 * margin + spacing, margin, margin); + break; + case SPDT: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing), + new Point(firstPoint.x, firstPoint.y + 2 * spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, + 2 * margin, 2 * margin + 2 * spacing, margin, margin); + break; + case DPDT: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing), + new Point(firstPoint.x, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + spacing, firstPoint.y), + new Point(firstPoint.x + spacing, firstPoint.y + spacing), + new Point(firstPoint.x + spacing, firstPoint.y + 2 * spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, 2 + * margin + spacing, 2 * margin + 2 * spacing, margin, margin); + break; + case _3PDT: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing), + new Point(firstPoint.x, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + spacing, firstPoint.y), + new Point(firstPoint.x + spacing, firstPoint.y + spacing), + new Point(firstPoint.x + spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + 2 * spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, 2 + * margin + 2 * spacing, 2 * margin + 2 * spacing, margin, margin); + break; + case _4PDT: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing), + new Point(firstPoint.x, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + spacing, firstPoint.y), + new Point(firstPoint.x + spacing, firstPoint.y + spacing), + new Point(firstPoint.x + spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 3 * spacing, firstPoint.y), + new Point(firstPoint.x + 3 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 3 * spacing, firstPoint.y + 2 * spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, 2 + * margin + 3 * spacing, 2 * margin + 2 * spacing, margin, margin); + break; + case _5PDT: + controlPoints = new Point[] { firstPoint, + new Point(firstPoint.x, firstPoint.y + spacing), + new Point(firstPoint.x, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + spacing, firstPoint.y), + new Point(firstPoint.x + spacing, firstPoint.y + spacing), + new Point(firstPoint.x + spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 2 * spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 3 * spacing, firstPoint.y), + new Point(firstPoint.x + 3 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 3 * spacing, firstPoint.y + 2 * spacing), + new Point(firstPoint.x + 4 * spacing, firstPoint.y), + new Point(firstPoint.x + 4 * spacing, firstPoint.y + spacing), + new Point(firstPoint.x + 4 * spacing, firstPoint.y + 2 * spacing) }; + body = new RoundRectangle2D.Double(firstPoint.x - margin, firstPoint.y - margin, 2 + * margin + 4 * spacing, 2 * margin + 2 * spacing, margin, margin); + break; + } + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + updateControlPoints(); + } + + @EditableProperty + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @EditableProperty(name = "Type") + @Override + public ToggleSwitchType getValue() { + return switchType; + } + + @Override + public void setValue(ToggleSwitchType value) { + this.switchType = value; + updateControlPoints(); + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project) { + if (body != null) { + if (componentState != ComponentState.DRAGGING) { + g2d.setColor(BODY_COLOR); + g2d.fill(body); + } + g2d.setStroke(new BasicStroke()); + g2d.setColor(BORDER_COLOR); + g2d.draw(body); + } + if (componentState != ComponentState.DRAGGING) { + int circleRadius = CIRCLE_SIZE.convertToPixels() / 2; + int lugWidth = LUG_WIDTH.convertToPixels(); + int lugHeight = LUG_HEIGHT.convertToPixels(); + for (Point p : controlPoints) { + g2d.setColor(CIRCLE_COLOR); + g2d.fillOval(p.x - circleRadius, p.y - circleRadius, 2 * circleRadius, + 2 * circleRadius); + g2d.setColor(LUG_COLOR); + g2d.fillRect(p.x - lugWidth / 2, p.y - lugHeight / 2, lugWidth, lugHeight); + } + } + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + // TODO Auto-generated method stub + + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/ToggleSwitchType.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/ToggleSwitchType.java new file mode 100644 index 00000000..6a9e0c2e --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/ToggleSwitchType.java @@ -0,0 +1,11 @@ +package org.diylc.components.electromechanical; + +public enum ToggleSwitchType { + + SPST, SPDT, DPDT, _3PDT, _4PDT, _5PDT; + + @Override + public String toString() { + return name().replace("_", ""); + } +} 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/passive/AxialFilmCapacitor.java similarity index 91% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/AxialFilmCapacitor.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java index aad8ab34..7f0eebbc 100644 --- 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/passive/AxialFilmCapacitor.java @@ -1,10 +1,11 @@ -package org.diylc.components; +package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Rectangle2D; +import org.diylc.components.AbstractLeadedDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Capacitance; 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/passive/RadialCeramicDiskCapacitor.java similarity index 91% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialCeramicDiskCapacitor.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java index bc54a55f..25ef66a9 100644 --- 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/passive/RadialCeramicDiskCapacitor.java @@ -1,10 +1,11 @@ -package org.diylc.components; +package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Ellipse2D; +import org.diylc.components.AbstractLeadedDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Capacitance; 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/passive/RadialFilmCapacitor.java similarity index 91% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/RadialFilmCapacitor.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialFilmCapacitor.java index d93a1aed..f9d05875 100644 --- 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/passive/RadialFilmCapacitor.java @@ -1,10 +1,11 @@ -package org.diylc.components; +package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; +import org.diylc.components.AbstractLeadedDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Capacitance; 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/passive/Resistor.java similarity index 91% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/Resistor.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java index 2a7128d7..9598cad8 100644 --- 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/passive/Resistor.java @@ -1,10 +1,11 @@ -package org.diylc.components; +package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Rectangle2D; +import org.diylc.components.AbstractLeadedDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Resistance; 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/semiconductors/DIL_IC.java similarity index 95% rename from diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/DIL_IC.java rename to diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java index 2442ea27..2f839708 100644 --- 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/semiconductors/DIL_IC.java @@ -1,4 +1,4 @@ -package org.diylc.components; +package org.diylc.components.semiconductors; import java.awt.BasicStroke; import java.awt.Color;