diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar index d8c14dfa..c3edf3e6 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar differ 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 c479bf4b..33d05d68 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java index bab5d6bb..91172662 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractCurvedComponent.java @@ -24,11 +24,10 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp public static Color GUIDELINE_COLOR = Color.blue; public static Size DEFAULT_SIZE = new Size(1d, SizeUnit.in); - protected Point[] controlPoints = new Point[] { - new Point(-DEFAULT_SIZE.convertToPixels() / 2, -DEFAULT_SIZE.convertToPixels() / 2), - new Point(0, -DEFAULT_SIZE.convertToPixels() / 2), - new Point(0, DEFAULT_SIZE.convertToPixels() / 2), - new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels() / 2) }; + protected Point[] controlPoints = new Point[] { new Point(0, 0), + new Point(DEFAULT_SIZE.convertToPixels() / 2, 0), + new Point(DEFAULT_SIZE.convertToPixels() / 2, DEFAULT_SIZE.convertToPixels()), + new Point(DEFAULT_SIZE.convertToPixels(), DEFAULT_SIZE.convertToPixels()) }; protected Color color = getDefaultColor(); 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 29b01006..9dc7f028 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 @@ -102,7 +102,7 @@ public class Presenter implements IPlugInPort { super(); this.view = view; plugIns = new ArrayList(); - messageDispatcher = new MessageDispatcher(); + messageDispatcher = new MessageDispatcher(true); selectedComponents = new ComponentSelection(); lockedComponents = new HashSet>(); currentProject = new Project(); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AbstractPotentiometer.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AbstractPotentiometer.java new file mode 100644 index 00000000..a189c4da --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AbstractPotentiometer.java @@ -0,0 +1,84 @@ +package org.diylc.components.passive; + +import java.awt.Point; + +import org.diylc.common.Orientation; +import org.diylc.components.AbstractComponent; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.ResistanceUnit; + +public abstract class AbstractPotentiometer extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + protected Point[] controlPoints; + + protected Resistance resistance = new Resistance(100d, ResistanceUnit.K); + protected Orientation orientation = Orientation.DEFAULT; + protected Taper taper; + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @EditableProperty + public Resistance getResistance() { + return resistance; + } + + public void setResistance(Resistance resistance) { + this.resistance = resistance; + } + + @Override + public PotentiometerValue getValue() { + return new PotentiometerValue(resistance, taper); + } + + @Override + public void setValue(PotentiometerValue value) { + this.resistance = value.getResistance(); + this.taper = value.getTaper(); + } + + @EditableProperty + public Taper getTaper() { + return taper; + } + + public void setTaper(Taper taper) { + this.taper = taper; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerPanel.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerPanel.java new file mode 100644 index 00000000..a7999dd5 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerPanel.java @@ -0,0 +1,212 @@ +package org.diylc.components.passive; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.core.ComponentState; +import org.diylc.core.CreationMethod; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +@ComponentDescriptor(name = "Potentiometer (panel mount)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "test", zOrder = IDIYComponent.ABOVE_COMPONENT, stretchable = false) +public class PotentiometerPanel extends AbstractPotentiometer { + + private static final long serialVersionUID = 1L; + + protected static Size BODY_DIAMETER = new Size(1d, SizeUnit.in); + protected static Size SPACING = new Size(0.3d, SizeUnit.in); + protected static Size LUG_DIAMETER = new Size(0.15d, SizeUnit.in); + protected static Color BODY_COLOR = Color.gray.brighter(); + protected static Color BORDER_COLOR = Color.gray; + + protected Size bodyDiameter = BODY_DIAMETER; + protected Size spacing = SPACING; + protected Color bodyColor = BODY_COLOR; + protected Color borderColor = BORDER_COLOR; + protected Area[] body = null; + + public PotentiometerPanel() { + controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + updateControlPoints(); + } + + protected void updateControlPoints() { + int spacing = 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); + break; + case _90: + 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); + break; + case _270: + controlPoints[1].setLocation(controlPoints[0].x, controlPoints[0].y - spacing); + controlPoints[2].setLocation(controlPoints[0].x, controlPoints[0].y - 2 * spacing); + break; + default: + break; + } + } + + public Area[] getBody() { + int spacing = this.spacing.convertToPixels(); + int diameter = getClosestOdd(bodyDiameter.convertToPixels()); + if (body == null) { + body = new Area[7]; + + // Add lugs. + int lugDiameter = getClosestOdd(LUG_DIAMETER.convertToPixels()); + int holeDiameter = getClosestOdd(LUG_DIAMETER.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)); + 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)); + 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, + 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; + default: + break; + } + for (int i = 0; i < 3; i++) { + for (int j = 3; j < 7; j++) { + body[i].subtract(body[j]); + } + } + // 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, + holeDiameter))); + } + } + return body; + } + + @Override + public void setControlPoint(Point point, int index) { + super.setControlPoint(point, index); + body = null; + } + + @Override + public void setOrientation(Orientation orientation) { + super.setOrientation(orientation); + updateControlPoints(); + body = null; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + for (Area shape : getBody()) { + if (shape != null) { + g2d.setColor(bodyColor); + g2d.fill(shape); + g2d.setColor(borderColor); + g2d.draw(shape); + } + } + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + // TODO Auto-generated method stub + + } + + @EditableProperty + public Size getSpacing() { + return spacing; + } + + public void setSpacing(Size spacing) { + this.spacing = spacing; + updateControlPoints(); + body = null; + } + + @EditableProperty(name = "Diameter") + public Size getBodyDiameter() { + return bodyDiameter; + } + + public void setBodyDiameter(Size bodyDiameter) { + this.bodyDiameter = bodyDiameter; + } + + @EditableProperty(name = "Body") + public Color getBodyColor() { + return bodyColor; + } + + public void setBodyColor(Color bodyColor) { + this.bodyColor = bodyColor; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerValue.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerValue.java new file mode 100644 index 00000000..00efd2b3 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/PotentiometerValue.java @@ -0,0 +1,28 @@ +package org.diylc.components.passive; + +import org.diylc.core.measures.Resistance; + +public class PotentiometerValue { + + private Resistance resistance; + private Taper taper; + + public PotentiometerValue(Resistance resistance, Taper taper) { + super(); + this.resistance = resistance; + this.taper = taper; + } + + public Resistance getResistance() { + return resistance; + } + + public Taper getTaper() { + return taper; + } + + @Override + public String toString() { + return resistance.toString() + taper.toString(); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Taper.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Taper.java new file mode 100644 index 00000000..372e3294 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Taper.java @@ -0,0 +1,6 @@ +package org.diylc.components.passive; + +public enum Taper { + + LINEAR, LOG, REVERSE_LOG, W, S +}