Outline mode for trimmers, potentiometers and transistors

This commit is contained in:
bancika
2012-09-21 11:32:34 +00:00
parent ec597d964c
commit 3385d04d95
6 changed files with 332 additions and 214 deletions
@@ -10,6 +10,8 @@ import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation;
import org.diylc.core.ComponentState;
@@ -17,10 +19,12 @@ import org.diylc.core.CreationMethod;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
import org.diylc.core.Theme;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Potentiometer (panel mount)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "Panel mount potentiometer with solder lugs", zOrder = IDIYComponent.COMPONENT, stretchable = false)
public class PotentiometerPanel extends AbstractPotentiometer {
@@ -42,7 +46,8 @@ public class PotentiometerPanel extends AbstractPotentiometer {
transient protected Area[] body = null;
public PotentiometerPanel() {
controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) };
controlPoints = new Point[] { new Point(0, 0), new Point(0, 0),
new Point(0, 0) };
updateControlPoints();
}
@@ -50,20 +55,28 @@ public class PotentiometerPanel extends AbstractPotentiometer {
int spacing = (int) this.spacing.convertToPixels();
switch (orientation) {
case DEFAULT:
controlPoints[1].setLocation(controlPoints[0].x + spacing, controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing, controlPoints[0].y);
controlPoints[1].setLocation(controlPoints[0].x + spacing,
controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x + 2 * spacing,
controlPoints[0].y);
break;
case _90:
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y + spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y + 2 * spacing);
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y
+ spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y
+ 2 * spacing);
break;
case _180:
controlPoints[1].setLocation(controlPoints[0].x - spacing, controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing, controlPoints[0].y);
controlPoints[1].setLocation(controlPoints[0].x - spacing,
controlPoints[0].y);
controlPoints[2].setLocation(controlPoints[0].x - 2 * spacing,
controlPoints[0].y);
break;
case _270:
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y - spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y - 2 * spacing);
controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y
- spacing);
controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y
- 2 * spacing);
break;
default:
break;
@@ -80,49 +93,55 @@ public class PotentiometerPanel extends AbstractPotentiometer {
int lugDiameter = getClosestOdd(this.lugDiameter.convertToPixels());
int holeDiameter = getClosestOdd(this.lugDiameter.convertToPixels() / 2);
for (int i = 0; i < 3; i++) {
Area area = new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2,
controlPoints[i].y - lugDiameter / 2, lugDiameter, lugDiameter));
Area area = new Area(new Ellipse2D.Double(controlPoints[i].x
- lugDiameter / 2,
controlPoints[i].y - lugDiameter / 2, lugDiameter,
lugDiameter));
body[4 + i] = area;
}
switch (orientation) {
case DEFAULT:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x + spacing - diameter / 2, controlPoints[0].y - spacing
/ 2 - diameter, diameter, diameter));
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x
+ spacing - diameter / 2, controlPoints[0].y - spacing
/ 2 - diameter, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - holeDiameter / 2, controlPoints[i].y
- (spacing + diameter) / 2, holeDiameter,
(spacing + diameter) / 2));
}
break;
case _90:
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x + spacing / 2,
controlPoints[0].y + spacing - diameter / 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x,
controlPoints[i].y - holeDiameter / 2, (spacing + diameter) / 2,
holeDiameter));
}
break;
case _180:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x - spacing - diameter / 2, controlPoints[0].y + spacing
/ 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - holeDiameter / 2, controlPoints[i].y,
controlPoints[i].x - holeDiameter / 2,
controlPoints[i].y - (spacing + diameter) / 2,
holeDiameter, (spacing + diameter) / 2));
}
break;
case _270:
body[3] = new Area(new Ellipse2D.Double(
controlPoints[0].x - spacing / 2 - diameter, controlPoints[0].y - spacing
- diameter / 2, diameter, diameter));
case _90:
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x
+ spacing / 2, controlPoints[0].y + spacing - diameter
/ 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x
- (spacing + diameter) / 2, controlPoints[i].y - holeDiameter / 2,
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x, controlPoints[i].y
- holeDiameter / 2,
(spacing + diameter) / 2, holeDiameter));
}
break;
case _180:
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x
- spacing - diameter / 2, controlPoints[0].y + spacing
/ 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - holeDiameter / 2,
controlPoints[i].y, holeDiameter,
(spacing + diameter) / 2));
}
break;
case _270:
body[3] = new Area(new Ellipse2D.Double(controlPoints[0].x
- spacing / 2 - diameter, controlPoints[0].y - spacing
- diameter / 2, diameter, diameter));
for (int i = 0; i < 3; i++) {
body[i] = new Area(new Rectangle2D.Double(
controlPoints[i].x - (spacing + diameter) / 2,
controlPoints[i].y - holeDiameter / 2,
(spacing + diameter) / 2, holeDiameter));
}
break;
@@ -136,8 +155,9 @@ public class PotentiometerPanel extends AbstractPotentiometer {
}
// Make holes in the lugs.
for (int i = 0; i < 3; i++) {
body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x
- holeDiameter / 2, controlPoints[i].y - holeDiameter / 2, holeDiameter,
body[4 + i].subtract(new Area(new Ellipse2D.Double(
controlPoints[i].x - holeDiameter / 2,
controlPoints[i].y - holeDiameter / 2, holeDiameter,
holeDiameter)));
}
}
@@ -158,30 +178,51 @@ public class PotentiometerPanel extends AbstractPotentiometer {
}
@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));
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(
IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
for (Area shape : getBody()) {
if (shape != null) {
g2d.setColor(bodyColor);
Composite oldComposite = g2d.getComposite();
if (alpha < MAX_ALPHA) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
/ MAX_ALPHA));
g2d.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
}
if (!outlineMode) {
g2d.fill(shape);
}
g2d.fill(shape);
g2d.setComposite(oldComposite);
g2d.setColor(componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: borderColor);
Color finalBorderColor;
if (outlineMode) {
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else {
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: borderColor;
}
g2d.setColor(finalBorderColor);
g2d.draw(shape);
}
}
// Draw caption.
g2d.setFont(LABEL_FONT);
g2d
.setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED
: LABEL_COLOR);
Color finalLabelColor;
if (outlineMode) {
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: theme.getOutlineColor();
} else {
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: LABEL_COLOR;
}
g2d.setColor(finalLabelColor);
FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle2D bodyRect = getBody()[3].getBounds2D();
Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d);
@@ -194,7 +235,8 @@ public class PotentiometerPanel extends AbstractPotentiometer {
int x = (panelWidth - textWidth) / 2;
int y = panelHeight / 2 - textHeight + fontMetrics.getAscent();
g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect.getY() + y));
g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect
.getY() + y));
// Draw value.
rect = fontMetrics.getStringBounds(getValueForDisplay(), g2d);
@@ -214,19 +256,27 @@ public class PotentiometerPanel extends AbstractPotentiometer {
int margin = 4 * width / 32;
int spacing = width / 3 - 1;
g2d.setColor(BORDER_COLOR);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2 * width / 32));
g2d.drawLine(width / 2 - spacing, height / 2, width / 2 - spacing, height - margin);
g2d.drawLine(width / 2 + spacing, height / 2, width / 2 + spacing, height - margin);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(2 * width / 32));
g2d.drawLine(width / 2 - spacing, height / 2, width / 2 - spacing,
height - margin);
g2d.drawLine(width / 2 + spacing, height / 2, width / 2 + spacing,
height - margin);
g2d.drawLine(width / 2, height / 2, width / 2, height - margin);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(4 * width / 32));
g2d.drawLine(width / 2 - spacing, height - margin, width / 2 - spacing, height - margin);
g2d.drawLine(width / 2 + spacing, height - margin, width / 2 + spacing, height - margin);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(4 * width / 32));
g2d.drawLine(width / 2 - spacing, height - margin, width / 2 - spacing,
height - margin);
g2d.drawLine(width / 2 + spacing, height - margin, width / 2 + spacing,
height - margin);
g2d.drawLine(width / 2, height - margin, width / 2, height - margin);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.setColor(BODY_COLOR);
g2d.fillOval(margin, margin / 2, width - 2 * margin, height - 2 * margin);
g2d.fillOval(margin, margin / 2, width - 2 * margin, height - 2
* margin);
g2d.setColor(BORDER_COLOR);
g2d.drawOval(margin, margin / 2, width - 2 * margin, height - 2 * margin);
g2d.drawOval(margin, margin / 2, width - 2 * margin, height - 2
* margin);
}
@EditableProperty
@@ -12,6 +12,8 @@ import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.common.IPlugInPort;
import org.diylc.common.ObjectCache;
import org.diylc.common.Orientation;
import org.diylc.core.ComponentState;
@@ -19,10 +21,12 @@ import org.diylc.core.CreationMethod;
import org.diylc.core.IDIYComponent;
import org.diylc.core.IDrawingObserver;
import org.diylc.core.Project;
import org.diylc.core.Theme;
import org.diylc.core.annotations.ComponentDescriptor;
import org.diylc.core.annotations.EditableProperty;
import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit;
import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Trimmer Potentiometer", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "Various types of board mounted trimmer potentiometers", zOrder = IDIYComponent.COMPONENT, stretchable = false)
public class TrimmerPotentiometer extends AbstractPotentiometer {
@@ -50,7 +54,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
protected TrimmerType type = TrimmerType.FLAT_SMALL;
public TrimmerPotentiometer() {
controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) };
controlPoints = new Point[] { new Point(0, 0), new Point(0, 0),
new Point(0, 0) };
updateControlPoints();
}
@@ -176,8 +181,10 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
default:
break;
}
controlPoints[1].setLocation(controlPoints[0].x + dx1, controlPoints[0].y + dy1);
controlPoints[2].setLocation(controlPoints[0].x + dx2, controlPoints[0].y + dy2);
controlPoints[1].setLocation(controlPoints[0].x + dx1,
controlPoints[0].y + dy1);
controlPoints[2].setLocation(controlPoints[0].x + dx2,
controlPoints[0].y + dy2);
}
public Shape[] getBody() {
@@ -186,12 +193,14 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
// Calculate the center point as center of the minimum bounding
// rectangle.
int centerX = (Math.max(Math.max(controlPoints[0].x, controlPoints[1].x),
controlPoints[2].x) + Math.min(
Math.min(controlPoints[0].x, controlPoints[1].x), controlPoints[2].x)) / 2;
int centerY = (Math.max(Math.max(controlPoints[0].y, controlPoints[1].y),
controlPoints[2].y) + Math.min(
Math.min(controlPoints[0].y, controlPoints[1].y), controlPoints[2].y)) / 2;
int centerX = (Math.max(Math.max(controlPoints[0].x,
controlPoints[1].x), controlPoints[2].x) + Math.min(Math
.min(controlPoints[0].x, controlPoints[1].x),
controlPoints[2].x)) / 2;
int centerY = (Math.max(Math.max(controlPoints[0].y,
controlPoints[1].y), controlPoints[2].y) + Math.min(Math
.min(controlPoints[0].y, controlPoints[1].y),
controlPoints[2].y)) / 2;
// Calculate body dimensions based on the selected type.
int length = 0;
@@ -202,11 +211,12 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
length = getClosestOdd(FLAT_BODY_SIZE.convertToPixels());
width = length;
int shaftSize = getClosestOdd(FLAT_SHAFT_SIZE.convertToPixels());
Area shaft = new Area(new Ellipse2D.Double(centerX - shaftSize / 2, centerY
- shaftSize / 2, shaftSize, shaftSize));
Area slot = new Area(new Rectangle2D.Double(centerX - shaftSize / 2, centerY
- shaftSize / 8, shaftSize, shaftSize / 4));
slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, centerX, centerY));
Area shaft = new Area(new Ellipse2D.Double(centerX - shaftSize
/ 2, centerY - shaftSize / 2, shaftSize, shaftSize));
Area slot = new Area(new Rectangle2D.Double(centerX - shaftSize
/ 2, centerY - shaftSize / 8, shaftSize, shaftSize / 4));
slot.transform(AffineTransform.getRotateInstance(Math.PI / 4,
centerX, centerY));
shaft.subtract(slot);
body[1] = shaft;
break;
@@ -216,13 +226,14 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
width = getClosestOdd(VERTICAL_BODY_WIDTH.convertToPixels());
break;
}
if (orientation == Orientation.DEFAULT || orientation == Orientation._180) {
if (orientation == Orientation.DEFAULT
|| orientation == Orientation._180) {
int p = length;
length = width;
width = p;
}
body[0] = new Rectangle2D.Double(centerX - length / 2, centerY - width / 2, length,
width);
body[0] = new Rectangle2D.Double(centerX - length / 2, centerY
- width / 2, length, width);
}
return body;
}
@@ -241,48 +252,75 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
}
@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) {
if (checkPointsClipped(g2d.getClip())) {
return;
}
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
Shape mainShape = getBody()[0];
Shape shaftShape = getBody()[1];
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(
IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
if (mainShape != null) {
g2d.setColor(bodyColor);
Composite oldComposite = g2d.getComposite();
if (alpha < MAX_ALPHA) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
/ MAX_ALPHA));
g2d.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
}
g2d.fill(mainShape);
if (shaftShape != null) {
if (!outlineMode) {
g2d.fill(mainShape);
}
if (!outlineMode && shaftShape != null) {
g2d.setColor(SHAFT_COLOR);
g2d.fill(shaftShape);
g2d.setColor(SHAFT_BORDER_COLOR);
g2d.draw(shaftShape);
}
g2d.setComposite(oldComposite);
g2d.setColor(componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor);
Color finalBorderColor;
if (outlineMode) {
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else {
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: borderColor;
}
g2d.setColor(finalBorderColor);
g2d.draw(mainShape);
}
// Draw pins.
int pinSize = getClosestOdd(PIN_SIZE.convertToPixels());
for (Point point : controlPoints) {
g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize);
g2d.setColor(PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize);
if (!outlineMode) {
g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
}
g2d.setColor(outlineMode ? theme.getOutlineColor()
: PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize,
pinSize);
}
// Draw label.
g2d.setFont(LABEL_FONT);
g2d
.setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED
: LABEL_COLOR);
Color finalLabelColor;
if (outlineMode) {
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: theme.getOutlineColor();
} else {
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: LABEL_COLOR;
}
g2d.setColor(finalLabelColor);
FontMetrics fontMetrics = g2d.getFontMetrics();
Rectangle2D bodyRect = getBody()[0].getBounds2D();
Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d);
@@ -295,7 +333,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
int x = (panelWidth - textWidth) / 2;
int y = (panelHeight - textHeight) / 2 + fontMetrics.getAscent();
g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect.getY() + y));
g2d.drawString(getName(), (int) (bodyRect.getX() + x), (int) (bodyRect
.getY() + y));
}
@Override
@@ -308,10 +347,12 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
g2d.drawRect(margin, margin, width - 2 * margin, width - 2 * margin);
int shaftSize = 11;
int slotSize = 2;
Area area = new Area(new Ellipse2D.Double(width / 2 - shaftSize / 2, width / 2 - shaftSize
/ 2, shaftSize, shaftSize));
Area slot = new Area(new Rectangle2D.Double(0, width / 2 - slotSize / 2, width, slotSize));
slot.transform(AffineTransform.getRotateInstance(Math.PI / 4, width / 2, width / 2));
Area area = new Area(new Ellipse2D.Double(width / 2 - shaftSize / 2,
width / 2 - shaftSize / 2, shaftSize, shaftSize));
Area slot = new Area(new Rectangle2D.Double(0,
width / 2 - slotSize / 2, width, slotSize));
slot.transform(AffineTransform.getRotateInstance(Math.PI / 4,
width / 2, width / 2));
area.subtract(slot);
g2d.setColor(SHAFT_COLOR);
g2d.fill(area);
@@ -330,9 +371,11 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
g2d.drawOval(margin - pinSize / 2, 21 - pinSize / 2, pinSize, pinSize);
g2d.setColor(PIN_COLOR);
g2d.fillOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, pinSize, pinSize);
g2d.fillOval(width - margin - pinSize / 2, width / 2 - pinSize / 2,
pinSize, pinSize);
g2d.setColor(PIN_BORDER_COLOR);
g2d.drawOval(width - margin - pinSize / 2, width / 2 - pinSize / 2, pinSize, pinSize);
g2d.drawOval(width - margin - pinSize / 2, width / 2 - pinSize / 2,
pinSize, pinSize);
}
@EditableProperty(name = "Body")
@@ -369,7 +412,8 @@ public class TrimmerPotentiometer extends AbstractPotentiometer {
@Override
public String toString() {
return name().substring(0, 1) + name().substring(1).toLowerCase().replace("_", " ");
return name().substring(0, 1)
+ name().substring(1).toLowerCase().replace("_", " ");
}
}
}
@@ -152,23 +152,38 @@ public class TransistorTO1 extends AbstractTransparentComponent<String> {
if (folded) {
switch (orientation) {
case DEFAULT:
body = new Area(new RoundRectangle2D.Double(x - bodyLength, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter)));
body = new Area(new RoundRectangle2D.Double(x - bodyLength,
y - bodyDiameter / 2, bodyLength, bodyDiameter,
edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(
x - bodyLength / 2, y - bodyDiameter / 2,
bodyLength / 2, bodyDiameter)));
break;
case _90:
body = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y - bodyLength, bodyDiameter, bodyLength, edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter, bodyLength / 2)));
body = new Area(new RoundRectangle2D.Double(x
- bodyDiameter / 2, y - bodyLength, bodyDiameter,
bodyLength, edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x - bodyDiameter
/ 2, y - bodyLength / 2, bodyDiameter,
bodyLength / 2)));
break;
case _180:
body = new Area(new RoundRectangle2D.Double(x, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter)));
body = new Area(new RoundRectangle2D.Double(x, y
- bodyDiameter / 2, bodyLength, bodyDiameter,
edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x, y
- bodyDiameter / 2, bodyLength / 2, bodyDiameter)));
break;
case _270:
body = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength, edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2)));
body = new Area(new RoundRectangle2D.Double(x
- bodyDiameter / 2, y, bodyDiameter, bodyLength,
edgeRadius, edgeRadius));
body.add(new Area(new Rectangle2D.Double(x - bodyDiameter
/ 2, y, bodyDiameter, bodyLength / 2)));
break;
default:
throw new RuntimeException("Unexpected orientation: " + orientation);
throw new RuntimeException("Unexpected orientation: "
+ orientation);
}
} else {
body = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y
@@ -197,9 +212,9 @@ public class TransistorTO1 extends AbstractTransparentComponent<String> {
g2d.fill(mainArea);
g2d.setComposite(oldComposite);
Color finalBorderColor;
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(
IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
@@ -212,23 +227,22 @@ public class TransistorTO1 extends AbstractTransparentComponent<String> {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.draw(mainArea);
if (!outlineMode) {
for (Point point : controlPoints) {
for (Point point : controlPoints) {
if (!outlineMode) {
g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
g2d.setColor(PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
}
g2d.setColor(outlineMode ? theme.getOutlineColor()
: PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize,
pinSize);
}
// Draw label.
g2d.setFont(LABEL_FONT);
Color finalLabelColor;
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: theme.getOutlineColor();
@@ -282,12 +296,12 @@ public class TransistorTO1 extends AbstractTransparentComponent<String> {
// Reset body shape;
body = null;
}
@EditableProperty(name="Pin spacing")
@EditableProperty(name = "Pin spacing")
public Size getPinSpacing() {
return pinSpacing;
}
public void setPinSpacing(Size pinSpacing) {
this.pinSpacing = pinSpacing;
updateControlPoints();
@@ -303,12 +317,12 @@ public class TransistorTO1 extends AbstractTransparentComponent<String> {
public void setBorderColor(Color borderColor) {
this.borderColor = borderColor;
}
@EditableProperty(name = "Label")
public Color getLabelColor() {
return labelColor;
}
public void setLabelColor(Color labelColor) {
this.labelColor = labelColor;
}
@@ -285,9 +285,9 @@ public class TransistorTO220 extends AbstractTransparentComponent<String> {
g2d.draw(tabArea);
}
Color finalBorderColor;
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(
IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
@@ -303,69 +303,82 @@ public class TransistorTO220 extends AbstractTransparentComponent<String> {
}
// Draw pins.
if (!outlineMode) {
if (folded) {
int leadThickness = getClosestOdd(LEAD_THICKNESS
.convertToPixels());
int leadLength = (int) getLeadLength().convertToPixels();
for (Point point : controlPoints) {
switch (orientation) {
case DEFAULT:
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness));
g2d.setColor(METAL_COLOR.darker());
g2d.drawLine(point.x, point.y, point.x + leadLength
- leadThickness / 2, point.y);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness - 2));
g2d.setColor(METAL_COLOR);
g2d.drawLine(point.x, point.y, point.x + leadLength
- leadThickness / 2, point.y);
break;
case _90:
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness));
g2d.setColor(METAL_COLOR.darker());
g2d.drawLine(point.x, point.y, point.x, point.y
+ leadLength - leadThickness / 2);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness - 2));
g2d.setColor(METAL_COLOR);
g2d.drawLine(point.x, point.y, point.x, point.y
+ leadLength - leadThickness / 2);
break;
case _180:
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness));
g2d.setColor(METAL_COLOR.darker());
g2d.drawLine(point.x, point.y, point.x - leadLength
- leadThickness / 2, point.y);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness - 2));
g2d.setColor(METAL_COLOR);
g2d.drawLine(point.x, point.y, point.x - leadLength
- leadThickness / 2, point.y);
break;
case _270:
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness));
g2d.setColor(METAL_COLOR.darker());
g2d.drawLine(point.x, point.y, point.x, point.y
- leadLength);
g2d.setStroke(ObjectCache.getInstance()
.fetchBasicStroke(leadThickness - 2));
g2d.setColor(METAL_COLOR);
g2d.drawLine(point.x, point.y, point.x, point.y
- leadLength);
break;
}
}
if (folded) {
int leadThickness = getClosestOdd(LEAD_THICKNESS.convertToPixels());
int leadLength = (int) getLeadLength().convertToPixels();
Color finalPinColor;
Color finalPinBorderColor;
if (outlineMode) {
finalPinColor = new Color(0, 0, 0, 0);
finalPinBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
} else {
finalPinColor = METAL_COLOR;
finalPinBorderColor = METAL_COLOR.darker();
}
for (Point point : controlPoints) {
switch (orientation) {
case DEFAULT:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness));
g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x + leadLength
- leadThickness / 2, point.y);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness - 2));
g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x + leadLength
- leadThickness / 2, point.y);
break;
case _90:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness));
g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y
+ leadLength - leadThickness / 2);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness - 2));
g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y
+ leadLength - leadThickness / 2);
break;
case _180:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness));
g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x - leadLength
- leadThickness / 2, point.y);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness - 2));
g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x - leadLength
- leadThickness / 2, point.y);
break;
case _270:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness));
g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x, point.y
- leadLength);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
leadThickness - 2));
g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x, point.y
- leadLength);
break;
}
}
} else {
if (!outlineMode) {
for (Point point : controlPoints) {
g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
g2d.setColor(PIN_BORDER_COLOR);
g2d.setColor(outlineMode ? theme.getOutlineColor()
: PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
}
@@ -376,8 +389,6 @@ public class TransistorTO220 extends AbstractTransparentComponent<String> {
g2d.setFont(LABEL_FONT);
Color finalLabelColor;
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: theme.getOutlineColor();
@@ -413,7 +424,7 @@ public class TransistorTO220 extends AbstractTransparentComponent<String> {
g2d.setColor(TAB_COLOR);
g2d.fill(a);
g2d.setColor(BORDER_COLOR);
g2d.draw(a);
g2d.draw(a);
g2d.setColor(BODY_COLOR);
g2d.fillRect((width - bodySize) / 2, margin + tabSize, bodySize,
bodySize);
@@ -250,9 +250,9 @@ public class TransistorTO3 extends AbstractTransparentComponent<String> {
g2d.fill(mainArea);
g2d.setComposite(oldComposite);
Color finalBorderColor;
Theme theme = (Theme) ConfigurationManager.getInstance().readObject(
IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalBorderColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR
: theme.getOutlineColor();
@@ -266,23 +266,22 @@ public class TransistorTO3 extends AbstractTransparentComponent<String> {
g2d.draw(mainArea);
g2d.draw(innerArea);
if (!outlineMode) {
for (Point point : controlPoints) {
for (Point point : controlPoints) {
if (!outlineMode) {
g2d.setColor(PIN_COLOR);
g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
g2d.setColor(PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2,
pinSize, pinSize);
}
g2d.setColor(outlineMode ? theme.getOutlineColor()
: PIN_BORDER_COLOR);
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize,
pinSize);
}
// Draw label.
g2d.setFont(LABEL_FONT);
Color finalLabelColor;
if (outlineMode) {
Theme theme = (Theme) ConfigurationManager.getInstance()
.readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME);
finalLabelColor = componentState == ComponentState.SELECTED
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
: theme.getOutlineColor();
@@ -313,20 +312,20 @@ public class TransistorTO3 extends AbstractTransparentComponent<String> {
int hole = 4 * width / 32;
Area area = new Area(new Ellipse2D.Double((width - sizeLarge) / 2,
(height - sizeLarge) / 2, sizeLarge, sizeLarge));
// int[] x = new int[] { width / 2 + sizeSmall / 2,
// width / 2 + sizeLarge / 2, width / 2 + sizeSmall / 2,
// width / 2 - sizeSmall / 2, width / 2 - sizeLarge / 2,
// width / 2 - sizeSmall / 2 };
// int[] y = new int[] { height / 8, height / 2, height * 7 / 8,
// height * 7 / 8, height / 2, height / 8 };
// Area p = new Area(new Polygon(x, y, x.length));
// AffineTransform t = AffineTransform.getTranslateInstance(width / 2,
// height / 2);
// t.concatenate(AffineTransform.getScaleInstance(1.05, 1.05));
// t.concatenate(AffineTransform.getTranslateInstance(-width / 2,
// -height / 2));
// p.transform(t);
// area.add(new Area(p));
// int[] x = new int[] { width / 2 + sizeSmall / 2,
// width / 2 + sizeLarge / 2, width / 2 + sizeSmall / 2,
// width / 2 - sizeSmall / 2, width / 2 - sizeLarge / 2,
// width / 2 - sizeSmall / 2 };
// int[] y = new int[] { height / 8, height / 2, height * 7 / 8,
// height * 7 / 8, height / 2, height / 8 };
// Area p = new Area(new Polygon(x, y, x.length));
// AffineTransform t = AffineTransform.getTranslateInstance(width / 2,
// height / 2);
// t.concatenate(AffineTransform.getScaleInstance(1.05, 1.05));
// t.concatenate(AffineTransform.getTranslateInstance(-width / 2,
// -height / 2));
// p.transform(t);
// area.add(new Area(p));
area.add(new Area(new Ellipse2D.Double((width - sizeSmall) / 2, height
/ 8 - sizeSmall / 2, sizeSmall, sizeSmall)));
area.add(new Area(new Ellipse2D.Double((width - sizeSmall) / 2, height
@@ -341,8 +340,8 @@ public class TransistorTO3 extends AbstractTransparentComponent<String> {
g2d.fill(area);
g2d.setColor(BORDER_COLOR);
g2d.draw(area);
g2d.drawOval((width - sizeInner) / 2, (height - sizeInner) / 2, sizeInner,
sizeInner);
g2d.drawOval((width - sizeInner) / 2, (height - sizeInner) / 2,
sizeInner, sizeInner);
}
@EditableProperty(name = "Body")