diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/HorizontalAlignment.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/HorizontalAlignment.java new file mode 100644 index 00000000..b49f5c9a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/HorizontalAlignment.java @@ -0,0 +1,5 @@ +package org.diylc.common; + +public enum HorizontalAlignment { + LEFT, CENTER, RIGHT +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/VerticalAlignment.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/VerticalAlignment.java new file mode 100644 index 00000000..bfa665d4 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/VerticalAlignment.java @@ -0,0 +1,5 @@ +package org.diylc.common; + +public enum VerticalAlignment { + TOP, CENTER, BOTTOM +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java index 251dd1cd..72204793 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -2,8 +2,15 @@ package org.diylc.components; import java.awt.Color; import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.Shape; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.VerticalAlignment; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.EditableProperty; @@ -70,4 +77,43 @@ public abstract class AbstractComponent implements IDIYComponent { } return true; } + + protected void drawCenteredText(Graphics2D g2d, String text, int x, int y, + HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment) { + FontMetrics fontMetrics = g2d.getFontMetrics(); + Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d).getBounds(); + + Font font = g2d.getFont(); + FontRenderContext renderContext = g2d.getFontRenderContext(); + GlyphVector glyphVector = font.createGlyphVector(renderContext, text); + Rectangle visualBounds = glyphVector.getVisualBounds().getBounds(); + + int textX = 0; + switch (horizontalAlignment) { + case CENTER: + textX = x - stringBounds.width / 2; + break; + case LEFT: + textX = x; + break; + case RIGHT: + textX = x - stringBounds.width; + break; + } + + int textY = 0; + switch (verticalAlignment) { + case TOP: + textY = y + stringBounds.height; + break; + case CENTER: + textY = y - visualBounds.height / 2 - visualBounds.y; + break; + case BOTTOM: + textY = y - visualBounds.y; + break; + } + + g2d.drawString(text, textX, textY); + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/build.xml b/ diy-layout-creator --username bancika@gmail.com/diylc-library/build.xml index bd2075b4..ec00f750 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/build.xml +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/build.xml @@ -16,7 +16,7 @@ Compile with JDK ${java.runtime.version} - + @@ -46,7 +46,7 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index 19993a55..689f2bdf 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java index 9baadbfd..9c4f89e5 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java @@ -6,7 +6,9 @@ import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; +import org.diylc.common.HorizontalAlignment; import org.diylc.common.ObjectCache; +import org.diylc.common.VerticalAlignment; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; @@ -22,6 +24,8 @@ public abstract class AbstractBoard extends AbstractTransparentComponent public static Color BOARD_COLOR = Color.decode("#F8EBB3"); public static Color BORDER_COLOR = BOARD_COLOR.darker(); + public static Color COORDINATE_COLOR = Color.gray.brighter(); + public static float COORDINATE_FONT_SIZE = 9f; public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); @@ -34,10 +38,12 @@ public abstract class AbstractBoard extends AbstractTransparentComponent protected Color boardColor = BOARD_COLOR; protected Color borderColor = BORDER_COLOR; + protected Color coordinateColor = COORDINATE_COLOR; + protected Boolean drawCoordinates = true; @Override - public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, - IDrawingObserver drawingObserver) { + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, + Project project, IDrawingObserver drawingObserver) { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); if (componentState != ComponentState.DRAGGING) { Composite oldComposite = g2d.getComposite(); @@ -59,6 +65,44 @@ public abstract class AbstractBoard extends AbstractTransparentComponent drawingObserver.stopTracking(); } + protected void drawCoordinates(Graphics2D g2d, int spacing) { + if (!getDrawCoordinates()) + return; + Point p = new Point(firstPoint); + g2d.setColor(coordinateColor); + g2d.setFont(LABEL_FONT.deriveFont(COORDINATE_FONT_SIZE)); + + int t = 1; + while (p.y < secondPoint.y - spacing) { + p.y += spacing; + super.drawCenteredText(g2d, getCoordinateLabel(t++), p.x + 2, p.y, + HorizontalAlignment.LEFT, VerticalAlignment.CENTER); + } + + p = new Point(firstPoint); + t = 1; + while (p.x < secondPoint.x - spacing) { + p.x += spacing; + super.drawCenteredText(g2d, getCoordinateLabel(t++), p.x, p.y - 2, + HorizontalAlignment.CENTER, VerticalAlignment.TOP); + } + } + + private String getCoordinateLabel(int coordinate) { + String result = ""; + while (coordinate > 0) { + int digit = coordinate % 26; + coordinate /= 26; + if (digit == 0) { + result = 'Z' + result; + coordinate--; + } else { + result = (char) ((int) 'A' + digit - 1) + result; + } + } + return result; + } + @EditableProperty(name = "Color") public Color getBoardColor() { return boardColor; @@ -68,6 +112,16 @@ public abstract class AbstractBoard extends AbstractTransparentComponent this.boardColor = boardColor; } + @EditableProperty(name = "Coordinate Color") + public Color getCoordinateColor() { + // Null protection for older files + return coordinateColor == null ? COORDINATE_COLOR : coordinateColor; + } + + public void setCoordinateColor(Color coordinateColor) { + this.coordinateColor = coordinateColor; + } + @EditableProperty(name = "Border") public Color getBorderColor() { return borderColor; @@ -77,6 +131,16 @@ public abstract class AbstractBoard extends AbstractTransparentComponent this.borderColor = borderColor; } + @EditableProperty(name = "Draw Coordinates") + public boolean getDrawCoordinates() { + // Null protection for older files + return drawCoordinates == null || drawCoordinates; + } + + public void setDrawCoordinates(boolean drawCoordinates) { + this.drawCoordinates = drawCoordinates; + } + @Override public int getControlPointCount() { return controlPoints.length; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java index 8fd4958e..0c5b3ee0 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/BlankBoard.java @@ -17,4 +17,10 @@ public class BlankBoard extends AbstractBoard { g2d.setColor(BORDER_COLOR); g2d.drawRect(2, 2, width - 4, height - 4); } + + @Override + public boolean getDrawCoordinates() { + // Override to prevent editing. + return super.getDrawCoordinates(); + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java index b05bfa0a..8d99e225 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/EyeletBoard.java @@ -75,6 +75,7 @@ public class EyeletBoard extends AbstractBoard { holeDiameter); } } + super.drawCoordinates(g2d, spacing); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java index 72bafe61..9e225d19 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java @@ -66,6 +66,7 @@ public class MarshallPerfBoard extends AbstractBoard { holeDiameter); } } + super.drawCoordinates(g2d, spacing); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java index 1fbd6dfd..f902d620 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/PerfBoard.java @@ -67,6 +67,7 @@ public class PerfBoard extends AbstractBoard { holeDiameter); } } + super.drawCoordinates(g2d, spacing); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java index e1b3b15f..e37fa22e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/VeroBoard.java @@ -92,6 +92,7 @@ public class VeroBoard extends AbstractBoard { } } g2d.setComposite(oldComposite); + super.drawCoordinates(g2d, spacing); } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath index e231e1da..ec3f46f8 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath @@ -11,7 +11,7 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch index d926f070..11d120ec 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch @@ -11,5 +11,5 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar index a4e0bf17..b5073ba2 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar index b2211645..6053d799 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml index df24cf08..30919a48 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml @@ -422,6 +422,10 @@ NEW_FEATURE Ctrl+Shift toggles "Snap to Grid" option + + NEW_FEATURE + Perfboards can show hole coordinates + http://code.google.com/p/diy-layout-creator/downloads/list