mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 17:22:09 +10:00
perfboards can show coordinates
This commit is contained in:
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package org.diylc.common;
|
||||||
|
|
||||||
|
public enum HorizontalAlignment {
|
||||||
|
LEFT, CENTER, RIGHT
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package org.diylc.common;
|
||||||
|
|
||||||
|
public enum VerticalAlignment {
|
||||||
|
TOP, CENTER, BOTTOM
|
||||||
|
}
|
||||||
+46
@@ -2,8 +2,15 @@ package org.diylc.components;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
|
import java.awt.FontMetrics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Rectangle;
|
||||||
import java.awt.Shape;
|
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.IDIYComponent;
|
||||||
import org.diylc.core.annotations.EditableProperty;
|
import org.diylc.core.annotations.EditableProperty;
|
||||||
|
|
||||||
@@ -70,4 +77,43 @@ public abstract class AbstractComponent<T> implements IDIYComponent<T> {
|
|||||||
}
|
}
|
||||||
return true;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<target name="compile">
|
<target name="compile">
|
||||||
<mkdir dir="${classes.dir}" />
|
<mkdir dir="${classes.dir}" />
|
||||||
<echo>Compile with JDK ${java.runtime.version}</echo>
|
<echo>Compile with JDK ${java.runtime.version}</echo>
|
||||||
<javac encoding="8859_1" srcdir="${basedir}/${src.dir}" destdir="${classes.dir}" classpathref="class.path" />
|
<javac encoding="8859_1" srcdir="${basedir}/${src.dir}" destdir="${classes.dir}" classpathref="class.path" debug="true" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="resource.copy">
|
<target name="resource.copy">
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
<target name="jar" depends="clean, lib.copy, resource.copy, compile">
|
<target name="jar" depends="clean, lib.copy, resource.copy, compile">
|
||||||
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" />
|
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" />
|
||||||
<copy todir="../DIYLC/library" overwrite="true">
|
<copy todir="../diylc-swing/library" overwrite="true">
|
||||||
<fileset dir="${jar.dir}" includes="${ant.project.name}.jar" />
|
<fileset dir="${jar.dir}" includes="${ant.project.name}.jar" />
|
||||||
</copy>
|
</copy>
|
||||||
</target>
|
</target>
|
||||||
|
|||||||
Binary file not shown.
+66
-2
@@ -6,7 +6,9 @@ import java.awt.Composite;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
|
||||||
|
import org.diylc.common.HorizontalAlignment;
|
||||||
import org.diylc.common.ObjectCache;
|
import org.diylc.common.ObjectCache;
|
||||||
|
import org.diylc.common.VerticalAlignment;
|
||||||
import org.diylc.components.AbstractTransparentComponent;
|
import org.diylc.components.AbstractTransparentComponent;
|
||||||
import org.diylc.core.ComponentState;
|
import org.diylc.core.ComponentState;
|
||||||
import org.diylc.core.IDrawingObserver;
|
import org.diylc.core.IDrawingObserver;
|
||||||
@@ -22,6 +24,8 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
|||||||
|
|
||||||
public static Color BOARD_COLOR = Color.decode("#F8EBB3");
|
public static Color BOARD_COLOR = Color.decode("#F8EBB3");
|
||||||
public static Color BORDER_COLOR = BOARD_COLOR.darker();
|
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_WIDTH = new Size(1.5d, SizeUnit.in);
|
||||||
public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in);
|
public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in);
|
||||||
|
|
||||||
@@ -34,10 +38,12 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
|||||||
|
|
||||||
protected Color boardColor = BOARD_COLOR;
|
protected Color boardColor = BOARD_COLOR;
|
||||||
protected Color borderColor = BORDER_COLOR;
|
protected Color borderColor = BORDER_COLOR;
|
||||||
|
protected Color coordinateColor = COORDINATE_COLOR;
|
||||||
|
protected Boolean drawCoordinates = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project,
|
public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode,
|
||||||
IDrawingObserver drawingObserver) {
|
Project project, IDrawingObserver drawingObserver) {
|
||||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
||||||
if (componentState != ComponentState.DRAGGING) {
|
if (componentState != ComponentState.DRAGGING) {
|
||||||
Composite oldComposite = g2d.getComposite();
|
Composite oldComposite = g2d.getComposite();
|
||||||
@@ -59,6 +65,44 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
|||||||
drawingObserver.stopTracking();
|
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")
|
@EditableProperty(name = "Color")
|
||||||
public Color getBoardColor() {
|
public Color getBoardColor() {
|
||||||
return boardColor;
|
return boardColor;
|
||||||
@@ -68,6 +112,16 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
|||||||
this.boardColor = boardColor;
|
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")
|
@EditableProperty(name = "Border")
|
||||||
public Color getBorderColor() {
|
public Color getBorderColor() {
|
||||||
return borderColor;
|
return borderColor;
|
||||||
@@ -77,6 +131,16 @@ public abstract class AbstractBoard extends AbstractTransparentComponent<String>
|
|||||||
this.borderColor = borderColor;
|
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
|
@Override
|
||||||
public int getControlPointCount() {
|
public int getControlPointCount() {
|
||||||
return controlPoints.length;
|
return controlPoints.length;
|
||||||
|
|||||||
+6
@@ -17,4 +17,10 @@ public class BlankBoard extends AbstractBoard {
|
|||||||
g2d.setColor(BORDER_COLOR);
|
g2d.setColor(BORDER_COLOR);
|
||||||
g2d.drawRect(2, 2, width - 4, height - 4);
|
g2d.drawRect(2, 2, width - 4, height - 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getDrawCoordinates() {
|
||||||
|
// Override to prevent editing.
|
||||||
|
return super.getDrawCoordinates();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -75,6 +75,7 @@ public class EyeletBoard extends AbstractBoard {
|
|||||||
holeDiameter);
|
holeDiameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
super.drawCoordinates(g2d, spacing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -66,6 +66,7 @@ public class MarshallPerfBoard extends AbstractBoard {
|
|||||||
holeDiameter);
|
holeDiameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
super.drawCoordinates(g2d, spacing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -67,6 +67,7 @@ public class PerfBoard extends AbstractBoard {
|
|||||||
holeDiameter);
|
holeDiameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
super.drawCoordinates(g2d, spacing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -92,6 +92,7 @@ public class VeroBoard extends AbstractBoard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
g2d.setComposite(oldComposite);
|
g2d.setComposite(oldComposite);
|
||||||
|
super.drawCoordinates(g2d, spacing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<classpathentry kind="lib" path="lib/objenesis-1.1.jar"/>
|
<classpathentry kind="lib" path="lib/objenesis-1.1.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jettison-1.0.1.jar"/>
|
<classpathentry kind="lib" path="lib/jettison-1.0.1.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/poi-3.5-FINAL-20090928.jar"/>
|
<classpathentry kind="lib" path="lib/poi-3.5-FINAL-20090928.jar"/>
|
||||||
<classpathentry kind="lib" path="library/main.jar"/>
|
<classpathentry kind="lib" path="library/main.jar" sourcepath="/diylc-library"/>
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/diylc-core"/>
|
||||||
<classpathentry kind="lib" path="lib/app-framework.jar"/>
|
<classpathentry kind="lib" path="lib/app-framework.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/swing-framework.jar"/>
|
<classpathentry kind="lib" path="lib/swing-framework.jar"/>
|
||||||
|
|||||||
@@ -11,5 +11,5 @@
|
|||||||
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;Library&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;DIYLC&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;Library&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;DIYLC&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.diylc.DIYLCStarter"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="diylc-swing"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx512m -Dorg.diylc.debugComponentAreas=true"/>
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx512m -Ddorg.diylc.debugComponentAreas=true"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -422,6 +422,10 @@
|
|||||||
<changeType>NEW_FEATURE</changeType>
|
<changeType>NEW_FEATURE</changeType>
|
||||||
<description>Ctrl+Shift toggles "Snap to Grid" option</description>
|
<description>Ctrl+Shift toggles "Snap to Grid" option</description>
|
||||||
</com.diyfever.gui.update.Change>
|
</com.diyfever.gui.update.Change>
|
||||||
|
<com.diyfever.gui.update.Change>
|
||||||
|
<changeType>NEW_FEATURE</changeType>
|
||||||
|
<description>Perfboards can show hole coordinates</description>
|
||||||
|
</com.diyfever.gui.update.Change>
|
||||||
</changes>
|
</changes>
|
||||||
<url>http://code.google.com/p/diy-layout-creator/downloads/list</url>
|
<url>http://code.google.com/p/diy-layout-creator/downloads/list</url>
|
||||||
</com.diyfever.gui.update.Version>
|
</com.diyfever.gui.update.Version>
|
||||||
|
|||||||
Reference in New Issue
Block a user