From cb5c95478f0c6caf3e043427c4c041e3d9e12412 Mon Sep 17 00:00:00 2001 From: bancika Date: Tue, 4 Jan 2011 22:19:24 +0000 Subject: [PATCH] abstract leaded component changes --- .../DIYLC/library/main.jar | Bin 5470 -> 6118 bytes .../AbstractLeadedDIYComponent.java | 112 +++++++++++++----- .../org/diylc/components/Resistor.java | 43 ++++--- .../DIYLC/src/org/diylc/gui/MainFrame.java | 3 +- .../diylc/plugins/statusbar/StatusBar.java | 5 +- .../src/org/diylc/presenter/G2DWrapper.java | 3 + .../src/org/diylc/presenter/Presenter.java | 15 +-- .../DIYLC/src/org/diylc/utils/Constants.java | 1 + 8 files changed, 124 insertions(+), 58 deletions(-) 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 805a3a93b5d0e26882f2368cb6a3a90e1fd94fbb..51152b34ec827038cc7ad4afe31c45a08d894826 100644 GIT binary patch delta 5666 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 delta 5017 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 IJ&1_@2m6nKGynhq 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,