diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index 805a3a93..51152b34 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/AbstractLeadedDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/AbstractLeadedDIYComponent.java index 37a886f4..8338abcb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/AbstractLeadedDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/AbstractLeadedDIYComponent.java @@ -1,7 +1,15 @@ package org.diylc.components; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Font; +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.VisibilityPolicy; import org.diylc.core.annotations.ComponentName; @@ -10,10 +18,10 @@ 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 for leads and one control point for the label. + * 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 */ @@ -21,41 +29,96 @@ 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 Font LABEL_FONT = new Font("Tahoma", Font.BOLD, 11); + protected Size width; protected Size height; protected Point point1 = new Point(0, 0); protected Point point2 = new Point((int) (Constants.GRID * 10), 0); - protected Point labelPoint = new Point((int) (Constants.GRID * 5), -(int) Constants.GRID); - protected String name = "New Component"; + protected String componentName = "New Component"; protected AbstractLeadedDIYComponent() { super(); - this.width = getDefaultWidth(); - this.height = getDefaultHeight(); + try { + this.width = getDefaultWidth().clone(); + this.height = getDefaultHeight().clone(); + } catch (CloneNotSupportedException e) { + // This should never happen because Size supports cloning. + } } /** - * Returns the default component width. - * - * @return + * @return default component width. */ protected abstract Size getDefaultWidth(); /** - * Returns the default component height. + * Returns default component height. * * @return */ protected abstract Size getDefaultHeight(); - @ComponentName - @EditableProperty - public String getName() { - return name; + /** + * @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 void draw(Graphics2D g2d, ComponentState componentState) { + g2d.setColor(LEAD_COLOR); + g2d.setStroke(new BasicStroke(1)); + double distance = point1.distance(point2); + Shape shape = getComponentShape(); + Rectangle shapeRect = shape.getBounds(); + double leadLenght = (distance - shapeRect.width) / 2; + Double theta; + theta = Math.atan2(point2.y - point1.y, point2.x - point1.x); + // Draw leads. + g2d.drawLine(point1.x, point1.y, (int) (point1.x + leadLenght * Math.cos(theta)), + (int) (point1.y + leadLenght * Math.sin(theta))); + g2d.drawLine(point2.x, point2.y, (int) (point2.x - leadLenght * Math.cos(theta)), + (int) (point2.y - leadLenght * Math.sin(theta))); + // Transform graphics to draw the body in the right place and at the + // right angle. + g2d.translate((point1.x + point2.x - shapeRect.width) / 2, + (point1.y + point2.y - shapeRect.height) / 2); + g2d.rotate(theta, shapeRect.width / 2, shapeRect.height / 2); + // Draw body. + g2d.setColor(getBodyColor()); + g2d.fill(shape); + g2d.setColor(getBorderColor()); + g2d.draw(shape); + // Draw label. + g2d.setFont(LABEL_FONT); + g2d.setColor(LABEL_COLOR); + FontMetrics fontMetrics = g2d.getFontMetrics(g2d.getFont()); + java.awt.geom.Rectangle2D textRect = fontMetrics.getStringBounds(getComponentName(), g2d); + g2d.drawString(getComponentName(), (int) (shapeRect.width - textRect.getWidth()) / 2, + (int) (shapeRect.height - textRect.getHeight()) / 2 + fontMetrics.getAscent()); } - public void setName(String name) { - this.name = name; + @ComponentName + @EditableProperty + public String getComponentName() { + return componentName; + } + + public void setComponentName(String componentName) { + this.componentName = componentName; } @ControlPoint(visibilityPolicy = VisibilityPolicy.WHEN_SELECTED) @@ -76,15 +139,6 @@ public abstract class AbstractLeadedDIYComponent implements IDIYComponent { this.point2 = point2; } - @ControlPoint(visibilityPolicy = VisibilityPolicy.WHEN_SELECTED) - public Point getLabelPoint() { - return labelPoint; - } - - public void setLabelPoint(Point labelPoint) { - this.labelPoint = labelPoint; - } - @EditableProperty(defaultable = true) public Size getWidth() { return width; @@ -107,7 +161,7 @@ public abstract class AbstractLeadedDIYComponent implements IDIYComponent { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((componentName == null) ? 0 : componentName.hashCode()); return result; } @@ -120,10 +174,10 @@ public abstract class AbstractLeadedDIYComponent implements IDIYComponent { if (getClass() != obj.getClass()) return false; AbstractLeadedDIYComponent other = (AbstractLeadedDIYComponent) obj; - if (name == null) { - if (other.name != null) + if (componentName == null) { + if (other.componentName != null) return false; - } else if (!name.equals(other.name)) + } else if (!componentName.equals(other.componentName)) return false; return true; } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/Resistor.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/Resistor.java index f5700ea1..166c1aed 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/Resistor.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src.library/org/diylc/components/Resistor.java @@ -1,10 +1,10 @@ package org.diylc.components; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Rectangle2D; -import org.diylc.core.ComponentState; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Resistance; @@ -17,8 +17,12 @@ 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 = Color.decode("#5D92B1"); + private Resistance r = new Resistance(123d, ResistanceUnit.K); - private Color color = Color.green; public Resistor() { super(); @@ -29,30 +33,33 @@ public class Resistor extends AbstractLeadedDIYComponent { return r; } - @Override - public void draw(Graphics2D g2d, ComponentState componentState) { - g2d.setColor(componentState.equals(ComponentState.SELECTED) ? color : color.darker()); - g2d.setStroke(new BasicStroke(1)); - if (componentState == ComponentState.DRAGGING) { - g2d.setStroke(new BasicStroke(1)); - } - g2d.drawLine(point1.x, point1.y, point2.x, point2.y); - g2d.rotate(Math.PI / 4, (point1.x + point2.x) / 2, (point1.y + point2.y) / 2); - g2d.fillRect((point1.x + point2.x) / 2 - 10, (point1.y + point2.y) / 2 - 10, 20, 20); - } - - @Override public void drawIcon(Graphics2D g2d, int width, int height) { g2d.drawString("R", 10, 10); } @Override protected Size getDefaultHeight() { - return new Size(3d, SizeUnit.mm); + return DEFAULT_HEIGHT; } @Override protected Size getDefaultWidth() { - return new Size(10d, SizeUnit.mm); + 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/DIYLC/src/org/diylc/gui/MainFrame.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java index b337bf28..2981318d 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java @@ -27,7 +27,6 @@ import org.diylc.plugins.canvas.CanvasPlugin; import org.diylc.plugins.clipboard.ClipboardManager; import org.diylc.plugins.file.FileManager; import org.diylc.plugins.help.HelpManager; -import org.diylc.plugins.online.OnlineManager; import org.diylc.plugins.statusbar.StatusBar; import org.diylc.plugins.toolbox.ToolBox; import org.diylc.presenter.Presenter; @@ -65,7 +64,7 @@ public class MainFrame extends JFrame implements IView { presenter.installPlugin(new ToolBox()); presenter.installPlugin(new FileManager()); presenter.installPlugin(new ClipboardManager()); - presenter.installPlugin(new OnlineManager()); +// presenter.installPlugin(new OnlineManager()); presenter.installPlugin(new HelpManager()); presenter.installPlugin(new StatusBar()); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/plugins/statusbar/StatusBar.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/plugins/statusbar/StatusBar.java index 67070cb8..03eff028 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/plugins/statusbar/StatusBar.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/plugins/statusbar/StatusBar.java @@ -33,6 +33,8 @@ public class StatusBar extends JPanel implements IPlugIn { private static final long serialVersionUID = 1L; + public static String UPDATE_URL = "http://www.diy-fever.com/update.xml"; + private JComboBox zoomBox; private UpdateLabel updateLabel; private MemoryBar memoryPanel; @@ -70,8 +72,7 @@ public class StatusBar extends JPanel implements IPlugIn { private UpdateLabel getUpdateLabel() { if (updateLabel == null) { - updateLabel = new UpdateLabel(plugInPort.getCurrentVersionNumber(), - "http://www.diy-fever.com/update.xml"); + updateLabel = new UpdateLabel(plugInPort.getCurrentVersionNumber(), UPDATE_URL); // updateLabel.setBorder(BorderFactory.createCompoundBorder( // BorderFactory.createEtchedBorder(), BorderFactory // .createEmptyBorder(2, 4, 2, 4))); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java index f17b6110..e3709b84 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/G2DWrapper.java @@ -46,6 +46,7 @@ class G2DWrapper extends Graphics2D { private Color originalColor; private Composite originalComposite; private AffineTransform originalTx; + private Font originalFont; private AffineTransform currentTx; private Area currentArea; @@ -69,6 +70,7 @@ class G2DWrapper extends Graphics2D { originalColor = canvasGraphics.getColor(); originalTx = canvasGraphics.getTransform(); originalComposite = canvasGraphics.getComposite(); + originalFont = canvasGraphics.getFont(); currentTx = new AffineTransform(); } @@ -83,6 +85,7 @@ class G2DWrapper extends Graphics2D { canvasGraphics.setColor(originalColor); canvasGraphics.setTransform(originalTx); canvasGraphics.setComposite(originalComposite); + canvasGraphics.setFont(originalFont); return currentArea; } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java index 206dfb46..881b0813 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java @@ -63,10 +63,11 @@ public class Presenter implements IPlugInPort { private static final Logger LOG = Logger.getLogger(Presenter.class); - private static final VersionNumber CURRENT_VERSION = new VersionNumber(0, 0, 0); - private static final String DEFAULTS_KEY = "defaults"; - private static final int CONTROL_POINT_SENSITIVITY = 4; - private static final int ICON_SIZE = 32; + public static final VersionNumber CURRENT_VERSION = new VersionNumber(0, 0, 0); + public static final String DEFAULTS_KEY = "defaults"; + public static final int CONTROL_POINT_SENSITIVITY = 4; + public static final int ICON_SIZE = 32; + public static boolean ENABLE_ANTIALIASING = true; private double zoomLevel = 1; private Map componentAreaMap; @@ -255,7 +256,7 @@ public class Presenter implements IPlugInPort { } G2DWrapper g2dWrapper = new G2DWrapper(g2d); - if (drawOptions.contains(DrawOption.ANTIALIASING)) { + if (drawOptions.contains(DrawOption.ANTIALIASING) && ENABLE_ANTIALIASING) { g2d .setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); @@ -264,7 +265,7 @@ public class Presenter implements IPlugInPort { AffineTransform initialTx = g2d.getTransform(); Dimension d = getCanvasDimensions(drawOptions.contains(DrawOption.ZOOM)); - g2dWrapper.setColor(Color.white); + g2dWrapper.setColor(Constants.CANVAS_COLOR); g2dWrapper.fillRect(0, 0, d.width, d.height); if (drawOptions.contains(DrawOption.GRID)) { @@ -706,7 +707,7 @@ public class Presenter implements IPlugInPort { // Instantiate the component. IDIYComponent component = componentClass.newInstance(); - // Find the next available name for the component. + // Find the next available componentName for the component. int i = 0; boolean exists = true; while (exists) { diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/utils/Constants.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/utils/Constants.java index 462b7b86..9cd4115e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/utils/Constants.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/utils/Constants.java @@ -9,6 +9,7 @@ public class Constants { public static final float GRID = Toolkit.getDefaultToolkit().getScreenResolution() / 10f; + public static final Color CANVAS_COLOR = Color.white; public static final Color GRID_COLOR = new Color(240, 240, 240); public static final Stroke dashedStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,