From 9bcc56f22813d8ea8336e501bf8e52be7488d881 Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Thu, 15 Dec 2022 23:25:49 +0100 Subject: [PATCH] Added '1/8" Cliff Jack' component - stereo and mono --- .../src/org/diylc/presenter/update.xml | 4 + diylc/diylc-library/lib/diylc-core.jar | Bin 392345 -> 392361 bytes .../electromechanical/CliffJack1_8.java | 377 ++++++++++++++++++ diylc/diylc-swing/build.xml | 2 +- diylc/diylc-swing/lib/diylc-core.jar | Bin 392345 -> 392361 bytes diylc/diylc-swing/library/main.jar | Bin 921143 -> 928063 bytes 6 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 diylc/diylc-library/src/org/diylc/components/electromechanical/CliffJack1_8.java diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 0ee62c1e..06fffea3 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -4234,6 +4234,10 @@ 2022-12-09 00:00:00.000 CET + + NEW_FEATURE + Added '1/8" Cliff Jack' component - stereo and mono + NEW_FEATURE Added 'Solder Lug' component diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 85280796945cea528d0b2dba989829332676152e..5571852b0d87ef7753c231fd5bcc6bf56fc7d470 100644 GIT binary patch delta 8136 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 JD}pbi=HL9i>RbQ- delta 8106 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. + * + */ +package org.diylc.components.electromechanical; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.awt.StringUtils; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractMultiPartComponent; +import org.diylc.components.transform.CliffJackTransformer; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.Theme; +import org.diylc.core.VisibilityPolicy; +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 = "Cliff 1/8\" Jack", category = "Electro-Mechanical", + author = "Branislav Stojkovic", description = "Cliff-style closed 1/8\" phono jack", + zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J", autoEdit = false, + transformer = CliffJackTransformer.class, enableCache = true) +public class CliffJack1_8 extends AbstractMultiPartComponent { + + private static final long serialVersionUID = 1L; + + private static Size ROW_SPACING = new Size(9.4d, SizeUnit.mm); + private static Size PIN_SPACING = new Size(3.8d, SizeUnit.mm); + private static Size PIN_WIDTH = new Size(1d, SizeUnit.mm); + private static Size PIN_THICKNESS = new Size(0.02d, SizeUnit.in); + private static Color BODY_COLOR = Color.decode("#666666"); + private static Color BORDER_COLOR = Color.black; + private static Color LABEL_COLOR = Color.white; + private static Size BODY_WIDTH = new Size(10.8d, SizeUnit.mm); + private static Size BODY_LENGTH_MONO = new Size(8.6d, SizeUnit.mm); + private static Size BODY_LENGTH_STEREO = new Size(12.4d, SizeUnit.mm); + private static Size SHAFT_LENGTH_W_NUT = new Size(5d, SizeUnit.mm); + private static Size SHAFT_LENGTH_NO_NUT = new Size(2d, SizeUnit.mm); + private static Size SHAFT_DIA_W_NUT = new Size(8d, SizeUnit.mm); + private static Size SHAFT_DIA_NO_NUT = new Size(7d, SizeUnit.mm); + + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; + private JackType type = JackType.MONO; + private Orientation orientation = Orientation.DEFAULT; + transient private Shape[] body; + private boolean nut = false; + + public CliffJack1_8() { + super(); + updateControlPoints(); + } + + private void updateControlPoints() { + // invalidate body shape + body = null; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + int rowSpacing = (int) ROW_SPACING.convertToPixels(); + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + controlPoints = new Point2D[type == JackType.STEREO ? 6 : 4]; + + controlPoints[0] = new Point2D.Double(x, y); + controlPoints[1] = new Point2D.Double(x, y + rowSpacing); + controlPoints[2] = new Point2D.Double(x + pinSpacing, y); + controlPoints[3] = new Point2D.Double(x + pinSpacing, y + rowSpacing); + if (type == JackType.STEREO) { + controlPoints[4] = new Point2D.Double(x + 2 * pinSpacing, y); + controlPoints[5] = new Point2D.Double(x + 2 * pinSpacing, y + rowSpacing); + } + + // Apply rotation if necessary + double angle = getAngle(); + if (angle != 0) { + AffineTransform rotation = AffineTransform.getRotateInstance(angle, x, y); + for (int i = 1; i < controlPoints.length; i++) { + rotation.transform(controlPoints[i], controlPoints[i]); + } + } + } + + private double getAngle() { + // Apply rotation if necessary + double angle; + switch (orientation) { + case _90: + angle = Math.PI / 2; + break; + case _180: + angle = Math.PI; + break; + case _270: + angle = Math.PI * 3 / 2; + break; + default: + angle = 0; + } + + return angle; + } + + public Shape[] getBody() { + if (body == null) { + body = new Shape[4]; + + // Create body. + double bodyLength = + (type == JackType.MONO ? BODY_LENGTH_MONO : BODY_LENGTH_STEREO).convertToPixels(); + double bodyWidth = BODY_WIDTH.convertToPixels(); + int shaftLength = (int) (nut ? SHAFT_LENGTH_W_NUT : SHAFT_LENGTH_NO_NUT).convertToPixels(); + int shaftWidth = (int) (nut ? SHAFT_DIA_W_NUT : SHAFT_DIA_NO_NUT).convertToPixels(); + double centerX = + (controlPoints[0].getX() + controlPoints[controlPoints.length - 1].getX()) / 2; + double centerY = + (controlPoints[0].getY() + controlPoints[controlPoints.length - 1].getY()) / 2; + + body[0] = new Area(new Rectangle2D.Double(centerX - bodyLength / 2, centerY - bodyWidth / 2, + bodyLength, bodyWidth)); + + body[1] = new Area(new Rectangle2D.Double(centerX + bodyLength / 2, centerY - shaftWidth / 2, + shaftLength, shaftWidth)); + + // Apply rotation if necessary + AffineTransform rotation = null; + double angle = getAngle(); + if (angle != 0) { + rotation = AffineTransform.getRotateInstance(angle, centerX, centerY); + for (int i = 0; i < body.length; i++) { + if (body[i] != null) { + Area area = new Area(body[i]); + area.transform(rotation); + body[i] = area; + } + } + } + + GeneralPath path = new GeneralPath(); + int step = 4; + for (double i = centerX + bodyLength / 2 + step; i <= centerX + bodyLength / 2 + + shaftLength; i += step) { + Point2D p = new Point2D.Double(i, centerY - shaftWidth / 2 + 1); + if (rotation != null) { + rotation.transform(p, p); + } + path.moveTo(p.getX(), p.getY()); + p = new Point2D.Double(i - step, centerY + shaftWidth / 2 - 1); + if (rotation != null) { + rotation.transform(p, p); + } + path.lineTo(p.getX(), p.getY()); + } + body[2] = path; + + // Create pins. + Area pins = new Area(); + + int pinWidth = (int) PIN_WIDTH.convertToPixels(); + int pinThickness = (int) PIN_THICKNESS.convertToPixels(); + for (int i = 0; i < getControlPointCount(); i++) { + Point2D point = getControlPoint(i); + Rectangle2D pin; + if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { + pin = new Rectangle2D.Double(point.getX() - pinWidth / 2, point.getY() - pinThickness / 2, + pinWidth, pinThickness); + } else { + pin = new Rectangle2D.Double(point.getX() - pinThickness / 2, point.getY() - pinWidth / 2, + pinThickness, pinWidth); + } + pins.add(new Area(pin)); + } + + body[3] = pins; + } + return body; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, + Project project, IDrawingObserver drawingObserver) { + Shape[] body = getBody(); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + // if (componentState != ComponentState.DRAGGING) { + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : BODY_COLOR); + for (int i = 0; i < 2; i++) { + g2d.fill(body[i]); + } + g2d.setComposite(oldComposite); + // } + + if (nut) { + g2d.setColor(BORDER_COLOR); + g2d.draw(body[2]); + } + + Color finalBorderColor; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, + Constants.DEFAULT_THEME); + if (outlineMode) { + finalBorderColor = theme.getOutlineColor(); + } else { + finalBorderColor = BORDER_COLOR; + } + + drawingObserver.stopTracking(); + + g2d.setColor(finalBorderColor); + for (int i = 0; i < 2; i++) { + g2d.draw(body[i]); + } + + // Pins are the last piece. + Shape pins = body[body.length - 1]; + if (!outlineMode) { + g2d.setColor(METAL_COLOR); + g2d.fill(pins); + } + g2d.setColor(outlineMode ? theme.getOutlineColor() : METAL_COLOR.darker()); + g2d.draw(pins); + + 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); + g2d.setFont(project.getFont()); + + // Override font size + if (getFontSizeOverride() != null) + g2d.setFont(g2d.getFont().deriveFont(1f * getFontSizeOverride())); + + double centerX = (controlPoints[0].getX() + controlPoints[controlPoints.length - 1].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[controlPoints.length - 1].getY()) / 2; + StringUtils.drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, + VerticalAlignment.CENTER); + + drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int bodyWidth = getClosestOdd(width * 3 / 5); + int tailWidth = getClosestOdd(width * 3 / 9); + + g2d.setColor(BODY_COLOR); + g2d.fillRoundRect((width - tailWidth) / 2, height / 2, tailWidth, height / 2 - 2 * 32 / height, + 4 * 32 / width, 4 * 32 / width); + g2d.setColor(BORDER_COLOR); + g2d.drawRoundRect((width - tailWidth) / 2, height / 2, tailWidth, height / 2 - 2 * 32 / height, + 4 * 32 / width, 4 * 32 / width); + + g2d.setColor(BODY_COLOR); + g2d.fillRoundRect((width - tailWidth) / 2, 2 * 32 / height, tailWidth, height / 2, + 4 * 32 / width, 4 * 32 / width); + g2d.setColor(BORDER_COLOR); + g2d.drawRoundRect((width - tailWidth) / 2, 2 * 32 / height, tailWidth, height / 2, + 4 * 32 / width, 4 * 32 / width); + + g2d.setColor(BODY_COLOR); + g2d.fillRect((width - bodyWidth) / 2, height / 7 + 1, bodyWidth, height * 5 / 7); + g2d.setColor(BORDER_COLOR); + g2d.drawRect((width - bodyWidth) / 2, height / 7 + 1, bodyWidth, height * 5 / 7); + + g2d.setColor(METAL_COLOR); + int pinX1 = getClosestOdd((width - bodyWidth * 3 / 4) / 2); + int pinX2 = getClosestOdd((width + bodyWidth * 3 / 4) / 2) - 1; + g2d.drawLine(pinX1, width * 2 / 8, pinX1, width * 3 / 8); + g2d.drawLine(pinX1, width * 5 / 8, pinX1, width * 6 / 8); + g2d.drawLine(pinX2, width * 2 / 8, pinX2, width * 3 / 8); + g2d.drawLine(pinX2, width * 5 / 8, pinX2, width * 6 / 8); + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point2D getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public void setControlPoint(Point2D point, int index) { + controlPoints[index].setLocation(point); + body = null; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @EditableProperty(name = "Type") + public JackType getValue() { + return type; + } + + public void setValue(JackType type) { + this.type = type; + updateControlPoints(); + } + + @EditableProperty + public boolean getNut() { + return nut; + } + + public void setNut(boolean nut) { + this.nut = nut; + this.body = null; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + updateControlPoints(); + } + + @Override + public boolean canPointMoveFreely(int pointIndex) { + return false; + } +} diff --git a/diylc/diylc-swing/build.xml b/diylc/diylc-swing/build.xml index 942244b2..395886cd 100644 --- a/diylc/diylc-swing/build.xml +++ b/diylc/diylc-swing/build.xml @@ -146,7 +146,7 @@ diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 85280796945cea528d0b2dba989829332676152e..5571852b0d87ef7753c231fd5bcc6bf56fc7d470 100644 GIT binary patch delta 8136 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 JD}pbi=HL9i>RbQ- delta 8106 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 C$qv8(