diff --git a/diylc/diylc-core/src/org/diylc/common/IGraphProcessor.java b/diylc/diylc-core/src/org/diylc/common/IGraphProcessor.java new file mode 100644 index 00000000..c38dfd8b --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/common/IGraphProcessor.java @@ -0,0 +1,32 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.common; + +import java.util.Map; + +import org.diylc.graph.Graph; +import org.diylc.graph.GraphKey; + +public interface IGraphProcessor { + + Map extractGraphs(); +} diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index b624e00a..7e7e8547 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -53,7 +53,7 @@ import org.diylc.core.Theme; * @see EventType */ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyProcessor, IVariantProcessor, - IBlockProcessor { + IBlockProcessor, IGraphProcessor { public static final String ANTI_ALIASING_KEY = "antiAliasing"; public static final String HI_QUALITY_RENDER_KEY = "hiQualityRender"; diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java index 5e6f9e59..0e8af038 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -35,7 +35,7 @@ import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Arrays; - + import org.diylc.common.HorizontalAlignment; import org.diylc.common.VerticalAlignment; import org.diylc.core.IDIYComponent; @@ -279,5 +279,10 @@ public abstract class AbstractComponent implements IDIYComponent { return Arrays.equals((Object[]) o1, (Object[]) o2); } return o1.equals(o2); + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + "." + index; } } diff --git a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java index 00c2e34f..436b870e 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -110,8 +110,18 @@ public interface IDIYComponent extends Serializable { * same component. The other control point must be able to overlap too. */ boolean canControlPointOverlap(int index); - - VisibilityPolicy getControlPointVisibilityPolicy(int index); + + /** + * @param index + * @return {@link VisibilityPolicy} of the control point. + */ + VisibilityPolicy getControlPointVisibilityPolicy(int index); + + /** + * @param index + * @return name of the control point node, if the control point represents a graph node, null otherwise. + */ + String getControlPointNodeName(int index); /** * Draws the component onto the {@link Graphics2D}. @@ -153,5 +163,5 @@ public interface IDIYComponent extends Serializable { * @param other * @return */ - boolean equalsTo(IDIYComponent other); + boolean equalsTo(IDIYComponent other); } diff --git a/diylc/diylc-core/src/org/diylc/core/ISwitch.java b/diylc/diylc-core/src/org/diylc/core/ISwitch.java new file mode 100644 index 00000000..7c826c70 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/core/ISwitch.java @@ -0,0 +1,51 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.core; + +/** + * Interface for all component that can act as switches. They must have at least one position. + * + * @author Branislav Stojkovic + */ +public interface ISwitch { + + /** + * @return a positive number of positions. + */ + int getPositionCount(); + + /** + * @param position + * @return name of switch positions, e.g. "ON", "OFF"... + */ + String getPositionName(int position); + + /** + * Tests control point connectivity. + * + * @param index1 + * @param index2 + * @param position + * @return true if the two points are connected in the given switch position, false otherwise. + */ + boolean arePointsConnected(int index1, int index2, int position); +} diff --git a/diylc/diylc-core/src/org/diylc/graph/Graph.java b/diylc/diylc-core/src/org/diylc/graph/Graph.java index d743567d..9e3ae1c0 100644 --- a/diylc/diylc-core/src/org/diylc/graph/Graph.java +++ b/diylc/diylc-core/src/org/diylc/graph/Graph.java @@ -1,25 +1,29 @@ package org.diylc.graph; -import java.util.Dictionary; +import java.util.HashSet; import java.util.Set; public class Graph { - private Dictionary positions; - private Set nodes; + private Set vertices = new HashSet(); - public Graph() { + public Graph() { } - public Dictionary getPositions() { - return positions; - } - - public Set getNodes() { - return nodes; + public Set getVertices() { + return vertices; } - public boolean nodesMatch(Graph other) { - return this.nodes.equals(other.nodes); + public boolean verticesMatch(Graph other) { + return this.vertices.equals(other.vertices); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (Vertex v : vertices) { + sb.append("\t").append(v.getNode1()).append(" - ").append(v.getNode2()).append("\n"); + } + return sb.toString(); } } diff --git a/diylc/diylc-core/src/org/diylc/graph/GraphKey.java b/diylc/diylc-core/src/org/diylc/graph/GraphKey.java new file mode 100644 index 00000000..f703e016 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/graph/GraphKey.java @@ -0,0 +1,54 @@ +package org.diylc.graph; + +import java.util.List; + +public class GraphKey { + + private List positions; + + public GraphKey(List positions) { + super(); + this.positions = positions; + } + + public List getPositions() { + return positions; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((positions == null) ? 0 : positions.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + GraphKey other = (GraphKey) obj; + if (positions == null) { + if (other.positions != null) + return false; + } else if (!positions.equals(other.positions)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (Position s : positions) + { + if (sb.length() > 0) + sb.append(":"); + sb.append(s.toString()); + } + return sb.toString(); + } +} diff --git a/diylc/diylc-core/src/org/diylc/graph/Node.java b/diylc/diylc-core/src/org/diylc/graph/Node.java index 7a58ea57..93fb905e 100644 --- a/diylc/diylc-core/src/org/diylc/graph/Node.java +++ b/diylc/diylc-core/src/org/diylc/graph/Node.java @@ -1,24 +1,25 @@ package org.diylc.graph; +import org.diylc.core.IDIYComponent; + public class Node { - private String type; - private String component; - private String terminal; + private IDIYComponent component; + private int pointIndex; - public Node() {} - - public String getType() { - return type; + public Node(IDIYComponent component, int pointIndex) { + super(); + this.component = component; + this.pointIndex = pointIndex; } - public String getComponent() { + public IDIYComponent getComponent() { return component; } - public String getTerminal() { - return terminal; + public int getPointIndex() { + return pointIndex; } @Override @@ -26,8 +27,7 @@ public class Node { final int prime = 31; int result = 1; result = prime * result + ((component == null) ? 0 : component.hashCode()); - result = prime * result + ((terminal == null) ? 0 : terminal.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + pointIndex; return result; } @@ -45,21 +45,13 @@ public class Node { return false; } else if (!component.equals(other.component)) return false; - if (terminal == null) { - if (other.terminal != null) - return false; - } else if (!terminal.equals(other.terminal)) - return false; - if (type == null) { - if (other.type != null) - return false; - } else if (!type.equals(other.type)) + if (pointIndex != other.pointIndex) return false; return true; } @Override public String toString() { - return type + "." + component + "." + terminal; + return component.getName() + "." + pointIndex + " @ (" + component.getControlPoint(pointIndex).getX() + ":" + component.getControlPoint(pointIndex).getY() + ")"; } } diff --git a/diylc/diylc-core/src/org/diylc/graph/Position.java b/diylc/diylc-core/src/org/diylc/graph/Position.java index 5102fac7..bf44d8eb 100644 --- a/diylc/diylc-core/src/org/diylc/graph/Position.java +++ b/diylc/diylc-core/src/org/diylc/graph/Position.java @@ -1,33 +1,33 @@ package org.diylc.graph; +import org.diylc.core.IDIYComponent; +import org.diylc.core.ISwitch; + public class Position { - private String ownerType; - private String owner; - private String name; - - public Position() { + private ISwitch theSwitch; + private int position; + + public Position(ISwitch theSwitch, int position) { + super(); + this.theSwitch = theSwitch; + this.position = position; } - public String getOwnerType() { - return ownerType; + public ISwitch getSwitch() { + return theSwitch; } - public String getOwner() { - return owner; - } - - public String getName() { - return name; + public int getPosition() { + return position; } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((owner == null) ? 0 : owner.hashCode()); - result = prime * result + ((ownerType == null) ? 0 : ownerType.hashCode()); + result = prime * result + position; + result = prime * result + ((theSwitch == null) ? 0 : theSwitch.hashCode()); return result; } @@ -40,26 +40,18 @@ public class Position { if (getClass() != obj.getClass()) return false; Position other = (Position) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) + if (position != other.position) return false; - if (owner == null) { - if (other.owner != null) + if (theSwitch == null) { + if (other.theSwitch != null) return false; - } else if (!owner.equals(other.owner)) - return false; - if (ownerType == null) { - if (other.ownerType != null) - return false; - } else if (!ownerType.equals(other.ownerType)) + } else if (!theSwitch.equals(other.theSwitch)) return false; return true; } @Override public String toString() { - return ownerType + "." + owner + "." + name; + return (theSwitch instanceof IDIYComponent ? ((IDIYComponent) theSwitch).getName() + "." : "") + theSwitch.getPositionName(position); } } diff --git a/diylc/diylc-core/src/org/diylc/graph/Vertex.java b/diylc/diylc-core/src/org/diylc/graph/Vertex.java index 3b15ef1a..6c646e9a 100644 --- a/diylc/diylc-core/src/org/diylc/graph/Vertex.java +++ b/diylc/diylc-core/src/org/diylc/graph/Vertex.java @@ -5,7 +5,9 @@ public class Vertex { private Node node1; private Node node2; - public Vertex() { + public Vertex(Node node1, Node node2) { + this.node1 = node1; + this.node2 = node2; } public Node getNode1() { diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 5c1f780c..5e2a4695 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -486,20 +486,33 @@ public class DrawingManager { ConfigurationManager.getInstance().writeValue(IPlugInPort.THEME_KEY, theme); messageDispatcher.dispatchMessage(EventType.REPAINT); } - - @SuppressWarnings("unchecked") + public void findContinuityAreaAtPoint(Project project, Point p) { + List areas = getContinuityAreas(project); + + for (Area a : areas) { + if (a.contains(p)) { + continuityArea = a; + return; + } + } + + continuityArea = null; + } + + @SuppressWarnings("unchecked") + public List getContinuityAreas(Project project) { // Find all individual continuity areas for all components List preliminaryAreas = new ArrayList(); List checkBreakout = new ArrayList(); - List connections = new ArrayList(); + List connections = new ArrayList(); for (IDIYComponent c : project.getComponents()) { ComponentArea a = getComponentArea(c); ComponentType type = ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) c.getClass()); if (type.isContinuity()) { - connections.add(new Connection(c.getControlPoint(0), c.getControlPoint(c.getControlPointCount() - 1))); + connections.add(new Line2D.Double(c.getControlPoint(0), c.getControlPoint(c.getControlPointCount() - 1))); } if (a == null || a.getOutlineArea() == null) @@ -532,18 +545,18 @@ public class DrawingManager { } crunchAreas(areas, connections); - - for (Area a : areas) { - if (a.contains(p)) { - continuityArea = a; - return; - } - } - - continuityArea = null; + + return areas; } - private boolean crunchAreas(List areas, List connections) { + /** + * Merges all areas that either overlap or are joined by connections. + * + * @param areas + * @param connections + * @return + */ + private boolean crunchAreas(List areas, List connections) { boolean isChanged = false; List newAreas = new ArrayList(); @@ -564,8 +577,8 @@ public class DrawingManager { a1.add(a2); consumed.set(j, true); } else { // maybe there's a connection between them - for (Connection p : connections) { - if ((a1.contains(p.pointA) && a2.contains(p.pointB)) || (a1.contains(p.pointB) && a2.contains(p.pointA))) { + for (Line2D p : connections) { + if ((a1.contains(p.getP1()) && a2.contains(p.getP2())) || (a1.contains(p.getP2()) && a2.contains(p.getP1()))) { a1.add(a2); consumed.set(j, true); break; @@ -624,24 +637,4 @@ public class DrawingManager { return toReturn; } - - class Connection { - - private Point pointA; - private Point pointB; - - public Connection(Point pointA, Point pointB) { - super(); - this.pointA = pointA; - this.pointB = pointB; - } - - public Point getPointA() { - return pointA; - } - - public Point getPointB() { - return pointB; - } - } } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 036332c1..e2370acc 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -24,6 +24,7 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.dnd.DnDConstants; import java.awt.geom.Area; +import java.awt.geom.Line2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.io.BufferedInputStream; @@ -67,6 +68,7 @@ import org.diylc.common.PropertyWrapper; import org.diylc.common.VariantPackage; import org.diylc.core.ExpansionMode; import org.diylc.core.IDIYComponent; +import org.diylc.core.ISwitch; import org.diylc.core.IView; import org.diylc.core.Project; import org.diylc.core.Template; @@ -74,6 +76,11 @@ import org.diylc.core.Theme; import org.diylc.core.annotations.IAutoCreator; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; +import org.diylc.graph.Graph; +import org.diylc.graph.GraphKey; +import org.diylc.graph.Node; +import org.diylc.graph.Position; +import org.diylc.graph.Vertex; import org.diylc.utils.Constants; import com.thoughtworks.xstream.XStream; @@ -2677,4 +2684,271 @@ public class Presenter implements IPlugInPort { ConfigurationManager.getInstance().writeValue(TEMPLATES_KEY, newVariantMap); } + + @SuppressWarnings("unchecked") + @Override + public Map extractGraphs() { + Map result = new HashMap(); + List nodes = new ArrayList(); + + List switches = new ArrayList(); + for (IDIYComponent c : currentProject.getComponents()) { + ComponentType type = + ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) c.getClass()); + // extract nodes + if (!type.isContinuity()) { + for (int i = 0; i < c.getControlPointCount(); i++) { + String nodeName = c.getControlPointNodeName(i); + if (nodeName != null) { + nodes.add(new Node(c, i)); + } + } + } + + // extract switches + if (ISwitch.class.isAssignableFrom(type.getInstanceClass())) + switches.add((ISwitch)c); + } + + // save us the trouble + if (nodes.isEmpty()) + return null; + + // if there are no switches, make one with 1 position so we get 1 result back + if (switches.isEmpty()) + switches.add(new ISwitch() { + + @Override + public String getPositionName(int position) { + return "Default"; + } + + @Override + public int getPositionCount() { + return 1; + } + + @Override + public boolean arePointsConnected(int index1, int index2, int position) { + return false; + } + }); + + // construct all possible combinations + int[] positions = new int[switches.size()]; + for (int i = 0; i < switches.size(); i++) + positions[i] = 0; + + // grab continuity areas + List continuity = drawingManager.getContinuityAreas(currentProject); + + int i = switches.size() - 1; + while (i >= 0) { + // process the current combination + Map switchPositions = new HashMap(); + List posList = new ArrayList(); + for (int j = 0; j < positions.length; j++) { + switchPositions.put(switches.get(j), positions[j]); + posList.add(new Position(switches.get(j), positions[j])); + } + List connections = getConnections(switchPositions); + Graph graph = constructGraph(nodes, connections, continuity); + result.put(new GraphKey(posList), graph); + + // find the next combination if possible + if (positions[i] < switches.get(i).getPositionCount() - 1) { + positions[i]++; + } else { + while (i >= 0 && positions[i] == switches.get(i).getPositionCount() - 1) + i--; + if (i >= 0) { + positions[i]++; + for (int j = i + 1; j < positions.length; j++) + positions[j] = 0; + i = switches.size() - 1; + } + } + } + + return result; + } + + private Graph constructGraph(List nodes, List connections, List continuityAreas) { + Graph graph = new Graph(); + + StringBuilder sb = new StringBuilder(); + sb.append("Nodes:").append("\n"); + for (Node n : nodes) { + sb.append(n.toString()).append("\n"); + } + sb.append("Connections:").append("\n"); + for (Line2D n : connections) { + sb.append(n.getP1()).append(":").append(n.getP2()).append("\n"); + } + LOG.debug(sb.toString()); + + double t = DrawingManager.CONTROL_POINT_SIZE; + for (int i = 0; i < nodes.size() - 1; i++) + for (int j = i + 1; j < nodes.size(); j++) { + Node node1 = nodes.get(i); + Node node2 = nodes.get(j); + Point2D point1 = node1.getComponent().getControlPoint(node1.getPointIndex()); + Point2D point2 = node2.getComponent().getControlPoint(node2.getPointIndex()); + + // try both directions + if (point1.distance(point2) < t || + checkGraphConnection(point1, point2, connections, continuityAreas, new boolean[connections.size()]) || + checkGraphConnection(point2, point1, connections, continuityAreas, new boolean[connections.size()])) { + graph.getVertices().add(new Vertex(node1, node2)); + } + } + + return graph; + } + + private boolean checkGraphConnection(Point2D point1, Point2D point2, List connections, + List continuityAreas, boolean[] visited) { + double t = DrawingManager.CONTROL_POINT_SIZE; + + if (point1.distance(point2) < t) + return true; + + for (Area a : continuityAreas) { + if (a.contains(point1) && a.contains(point2)) + return true; + } + + for (int i = 0; i < connections.size(); i++) { + if (visited[i]) + continue; + + Line2D c = connections.get(i); + if (point1.distance(c.getP1()) < t) { + visited[i] = true; + if (checkGraphConnection(c.getP2(), point2, connections, continuityAreas, visited)) + return true; + } + if (point1.distance(c.getP2()) < t) { + visited[i] = true; + if (checkGraphConnection(c.getP1(), point2, connections, continuityAreas, visited)) + return true; + } + } + + return false; + } + + @SuppressWarnings("unchecked") + private List getConnections(Map switchPositions) { + List connections = new ArrayList(); + for (IDIYComponent c : currentProject.getComponents()) { + ComponentType type = + ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) c.getClass()); + // handle direct connections + if (type.isContinuity()) { + connections.add(new Line2D.Double(c.getControlPoint(0), c.getControlPoint(c.getControlPointCount() - 1))); + } + // handle switches + if (ISwitch.class.isAssignableFrom(type.getInstanceClass()) && switchPositions.containsKey(c)) { + int position = switchPositions.get(c); + ISwitch s = (ISwitch)c; + for (int i = 0; i < c.getControlPointCount() - 1; i++) + for (int j = i + 1; j < c.getControlPointCount(); j++) + if (s.arePointsConnected(i, j, position)) + connections.add(new Line2D.Double(c.getControlPoint(i), c.getControlPoint(j))); + } + } + +// // grab continuity areas +// List continuity = drawingManager.getContinuityAreas(currentProject); +// +// mergeConnections(connections, continuity); + + return connections; + } + +// private void mergeConnections(List connections, List continuity) { +// List merged = new ArrayList(); +// boolean[] visited = new boolean[connections.size()]; +// for (int i = 0; i < visited.length; i++) +// visited[i] = false; +// +// double t = DrawingManager.CONTROL_POINT_SIZE; +// +// for (int i = 0; i < visited.length - 1; i++) { +// if (visited[i]) +// continue; +// for (int j = i + 1; j < visited.length; j++) { +// if (visited[j]) +// continue; +// Line2D c1 = connections.get(i); +// Line2D c2 = connections.get(j); +// Point2D p1 = null; +// Point2D p2 = null; +// boolean connected = false; +// // test direct continuity between two connections +// if (!connected && c1.getP1().distance(c2.getP1()) < t) { +// connected = true; +// p1 = c1.getP2(); +// p2 = c2.getP2(); +// } +// if (!connected && c1.getP1().distance(c2.getP2()) < t) { +// connected = true; +// p1 = c1.getP2(); +// p2 = c2.getP1(); +// } +// if (!connected && c1.getP2().distance(c2.getP1()) < t) { +// connected = true; +// p1 = c1.getP1(); +// p2 = c2.getP2(); +// } +// if (!connected && c1.getP2().distance(c2.getP2()) < t) { +// connected = true; +// p1 = c1.getP1(); +// p2 = c2.getP1(); +// } +// // if that failed, try using continuity areas +// if (!connected) { +// for (Area a : continuity) { +// if (!connected && a.contains(c1.getP1()) && a.contains(c2.getP1())) { +// connected = true; +// p1 = c1.getP2(); +// p2 = c2.getP2(); +// break; +// } +// if (!connected && a.contains(c1.getP1()) && a.contains(c2.getP2())) { +// connected = true; +// p1 = c1.getP2(); +// p2 = c2.getP1(); +// break; +// } +// if (!connected && a.contains(c1.getP2()) && a.contains(c2.getP1())) { +// connected = true; +// p1 = c1.getP1(); +// p2 = c2.getP2(); +// break; +// } +// if (!connected && a.contains(c1.getP2()) && a.contains(c2.getP2())) { +// connected = true; +// p1 = c1.getP1(); +// p2 = c2.getP1(); +// break; +// } +// } +// } +// +// if (connected) { +// visited[i] = visited[j] = true; +// merged.add(new Line2D.Double(p1, p2)); +// } +// } +// } +// +// // replace connections with merged +// if (!merged.isEmpty()) { +//// connections.clear(); +// connections.addAll(merged); +// mergeConnections(connections, continuity); // attempt another round of merging if needed +// } +// } } diff --git a/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java b/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java index 26dd22ba..c5733499 100644 --- a/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java +++ b/diylc/diylc-core/test/org/diylc/testcomponents/MockDIYComponent.java @@ -163,5 +163,10 @@ public class MockDIYComponent extends AbstractComponent { @Override public void drawIcon(Graphics2D g2d, int width, int height) { g2d.drawString("X", 10, 10); + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index cd4509ab..e91b03aa 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java index 796ce6e1..40ae0f00 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/BlankBoard.java @@ -122,6 +122,11 @@ public class BlankBoard extends AbstractBoard { public void setType(Type type) { this.type = type; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } static enum Type { diff --git a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java index 364cbdc7..e04c010b 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java @@ -364,7 +364,12 @@ public class Breadboard extends AbstractComponent { } @Override - public void setValue(Void value) {} + public void setValue(Void value) {} + + @Override + public String getControlPointNodeName(int index) { + return null; + } public enum BreadboardSize { Half, Full diff --git a/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java index b43bcbda..d47e9999 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java @@ -119,6 +119,11 @@ public class EyeletBoard extends AbstractBoard { public void setSpacing(Size spacing) { this.spacing = spacing; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java index ab2fb882..4a0eda81 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java @@ -103,6 +103,11 @@ public class MarshallPerfBoard extends AbstractBoard { public void setSpacing(Size spacing) { this.spacing = spacing; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java index 4a400a74..a88f7c8c 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java @@ -112,6 +112,11 @@ public class PerfBoard extends AbstractBoard { public void setSpacing(Size spacing) { this.spacing = spacing; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java index d69a81cc..a9b972fb 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java @@ -449,5 +449,10 @@ public class TerminalStrip extends AbstractTransparentComponent { public void setBorderColor(Color borderColor) { this.borderColor = borderColor; + } + + @Override + public String getControlPointNodeName(int index) { + return "TerminalStrip" + index; } } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java index d9cf5e21..b2058def 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java @@ -236,5 +236,10 @@ public class TriPadBoard extends AbstractBoard { } else { this.stripSpan = stripSpan; } + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java index 0b0e8c53..c3816130 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java @@ -148,6 +148,11 @@ public class VeroBoard extends AbstractBoard { public void setOrientation(OrientationHV orientation) { this.orientation = orientation; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java index bc6620c6..d1c6b67f 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java @@ -162,4 +162,9 @@ public class CopperTrace extends AbstractLeadedComponent { protected boolean IsCopperArea() { return true; } + + @Override + public String getControlPointNodeName(int index) { + return null; + } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java index 395f572b..8394aaad 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -111,4 +111,9 @@ public class CurvedTrace extends AbstractCurvedComponent { public LineStyle getStyle() { return super.getStyle(); } + + @Override + public String getControlPointNodeName(int index) { + return null; + } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java index 28582053..aeb144be 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CutLine.java @@ -157,4 +157,9 @@ public class CutLine extends AbstractTransparentComponent { @Override public void setValue(Void value) {} + + @Override + public String getControlPointNodeName(int index) { + return null; + } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java index 24890d11..5ca7b188 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Dot.java @@ -126,5 +126,10 @@ public class Dot extends AbstractComponent { } @Override - public void setValue(Void value) {} + public void setValue(Void value) {} + + @Override + public String getControlPointNodeName(int index) { + return null; + } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java index 1ecbeee2..6ed255e6 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java @@ -164,5 +164,10 @@ public class Eyelet extends AbstractComponent { @Override public void setValue(String value) { this.value = value; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java index 8439f7db..28609ae3 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java @@ -159,7 +159,12 @@ public class GroundFill extends AbstractComponent { @Deprecated @Override - public void setValue(Void value) {} + public void setValue(Void value) {} + + @Override + public String getControlPointNodeName(int index) { + return null; + } @Override public void drawIcon(Graphics2D g2d, int width, int height) { diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/HookupWire.java b/diylc/diylc-library/src/org/diylc/components/connectivity/HookupWire.java index 47cb8cdd..a78f2b40 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/HookupWire.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/HookupWire.java @@ -132,5 +132,5 @@ public class HookupWire extends AbstractCurvedComponent { public void setStripeColor(Color stripeColor) { this.stripeColor = stripeColor; - } + } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java index d3dee978..530c81be 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Line.java @@ -262,6 +262,11 @@ public class Line extends AbstractLeadedComponent { @Override protected Size getDefaultLength() { return null; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Deprecated diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java index acf03d96..70b387ee 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java @@ -182,6 +182,11 @@ public class SolderPad extends AbstractComponent { public Void getValue() { return null; } + + @Override + public String getControlPointNodeName(int index) { + return null; + } @Override public void setValue(Void value) {} diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java index e97eb09d..97dbafb3 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java @@ -230,5 +230,10 @@ public class TraceCut extends AbstractComponent { @Override public String getName() { return super.getName(); + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java index ea434174..b9993500 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java @@ -162,5 +162,10 @@ public class Turret extends AbstractComponent { @Override public void setValue(String value) { this.value = value; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java index aac507a4..cde83770 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniRelay.java @@ -31,7 +31,7 @@ import java.awt.Rectangle; import java.awt.geom.Area; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; - + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.Display; import org.diylc.common.IPlugInPort; @@ -426,9 +426,7 @@ public class MiniRelay extends AbstractTransparentComponent { } public static enum RelayType { - SPDT, DPDT; - } public static enum RelaySize { diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index e2e6e51b..f1ca4d61 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -39,6 +39,7 @@ import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; +import org.diylc.core.ISwitch; import org.diylc.core.Project; import org.diylc.core.Theme; import org.diylc.core.VisibilityPolicy; @@ -52,7 +53,7 @@ import org.diylc.utils.Constants; @ComponentDescriptor(name = "Mini Toggle Switch", category = "Electro-Mechanical", author = "Branislav Stojkovic", description = "Panel mounted mini toggle switch", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW", autoEdit = false) -public class MiniToggleSwitch extends AbstractTransparentComponent { +public class MiniToggleSwitch extends AbstractTransparentComponent implements ISwitch { private static final long serialVersionUID = 1L; @@ -377,5 +378,51 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { updateControlPoints(); // Invalidate the body body = null; - } + } } diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java index 587db779..369cf4a9 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java @@ -314,5 +314,10 @@ public class RCAJack extends AbstractMultiPartComponent { updateControlPoints(); // Invalidate the body body = null; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + (index == 0 ? "Tip" : "Sleeve"); } } diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java index 1b4a2d4e..273f921e 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/HumbuckerPickup.java @@ -567,6 +567,11 @@ public class HumbuckerPickup extends AbstractTransparentComponent { this.coilType2 = coilType2; // Invalidate the body body = null; + } + + @Override + public String getControlPointNodeName(int index) { + return "PickupTerminal"; } public static enum HumbuckerType { diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java index 47a79450..550b03bd 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/JazzBassPickup.java @@ -325,5 +325,10 @@ public class JazzBassPickup extends AbstractTransparentComponent { public void setPoleColor(Color poleColor) { this.poleColor = poleColor; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + ".PickupTerminal"; } } diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java b/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java index 6b26c3b9..876b2571 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/LPSwitch.java @@ -31,7 +31,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; - + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java b/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java index f6c2bb93..a93fdf6f 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/LeverSwitch.java @@ -32,7 +32,7 @@ import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; - + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; @@ -365,8 +365,8 @@ public class LeverSwitch extends AbstractTransparentComponent { updateControlPoints(); // Invalidate the body body = null; - } - + } + public enum LeverSwitchType { DP3T("DP3T (Standard Strat)"), _4P5T("4P5T (Super/Mega)"), DP5T("DP5T"); diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java index ea2b11c5..31c46dab 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/P90Pickup.java @@ -33,7 +33,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.RoundRectangle2D; - + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.HorizontalAlignment; import org.diylc.common.IPlugInPort; @@ -349,6 +349,11 @@ public class P90Pickup extends AbstractTransparentComponent { public void setPoleColor(Color poleColor) { this.poleColor = poleColor; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + ".PickupTerminal"; } public enum P90Type { diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java index 6a0f4bac..7d621409 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/PBassPickup.java @@ -313,5 +313,10 @@ public class PBassPickup extends AbstractTransparentComponent { public void setPoleColor(Color poleColor) { this.poleColor = poleColor; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + ".PickupTerminal"; } } diff --git a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java index cde84f6a..f404399a 100644 --- a/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java +++ b/diylc/diylc-library/src/org/diylc/components/guitar/SingleCoilPickup.java @@ -33,7 +33,7 @@ import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; - + import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.HorizontalAlignment; import org.diylc.common.IPlugInPort; @@ -464,6 +464,11 @@ public class SingleCoilPickup extends AbstractTransparentComponent { public void setPoleColor(Color poleColor) { this.poleColor = poleColor; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + ".PickupTerminal"; } public enum SingleCoilType { diff --git a/diylc/diylc-library/src/org/diylc/components/misc/BOM.java b/diylc/diylc-library/src/org/diylc/components/misc/BOM.java index 817666d0..4623c4a4 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/BOM.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/BOM.java @@ -29,7 +29,7 @@ import java.awt.Point; import java.awt.geom.Rectangle2D; import java.util.Iterator; import java.util.List; - + import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -58,7 +58,12 @@ public class BOM extends AbstractComponent { private Size size = DEFAULT_SIZE; private Point point = new Point(0, 0); - private Color color = COLOR; + private Color color = COLOR; + + @Override + public String getControlPointNodeName(int index) { + return null; + } @Override public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, diff --git a/diylc/diylc-library/src/org/diylc/components/misc/BatterySymbol.java b/diylc/diylc-library/src/org/diylc/components/misc/BatterySymbol.java index 08c912be..6da40f47 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/BatterySymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/BatterySymbol.java @@ -24,7 +24,7 @@ package org.diylc.components.misc; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.GeneralPath; - + import org.diylc.components.AbstractSchematicLeadedSymbol; import org.diylc.core.CreationMethod; import org.diylc.core.IDIYComponent; @@ -130,7 +130,10 @@ public class BatterySymbol extends AbstractSchematicLeadedSymbol { * width / 32); g2d.drawLine(height / 2 - 6 * width / 32, height / 2 - 3 * width / 32, height / 2 - 6 * width / 32, height / 2 - 7 * width / 32); + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + "." + (index == 0 ? "+" : "-"); } - - } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java b/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java index c61d2c83..cc0daaa6 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/GroundSymbol.java @@ -25,7 +25,7 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Polygon; - + import org.diylc.common.ObjectCache; import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; @@ -134,6 +134,11 @@ public class GroundSymbol extends AbstractComponent { @Override public void setControlPoint(Point point, int index) { this.point = point; + } + + @Override + public String getControlPointNodeName(int index) { + return getName(); } @Override diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Image.java b/diylc/diylc-library/src/org/diylc/components/misc/Image.java index 467e8682..c5958271 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Image.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Image.java @@ -27,9 +27,9 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.Shape; import java.awt.geom.Rectangle2D; - + import javax.swing.ImageIcon; - + import org.diylc.appframework.miscutils.IconImageConverter; import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; @@ -41,7 +41,7 @@ import org.diylc.core.annotations.BomPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.PercentEditor; - + import com.thoughtworks.xstream.annotations.XStreamConverter; @ComponentDescriptor(name = "Image", author = "Branislav Stojkovic", category = "Misc", @@ -60,6 +60,11 @@ public class Image extends AbstractTransparentComponent { if (imgURL != null) { ICON = new ImageIcon(imgURL, name); } + } + + @Override + public String getControlPointNodeName(int index) { + return null; } private Point point = new Point(0, 0); diff --git a/diylc/diylc-library/src/org/diylc/components/misc/Label.java b/diylc/diylc-library/src/org/diylc/components/misc/Label.java index b7cecc42..bda00cb5 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/Label.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/Label.java @@ -282,5 +282,10 @@ public class Label extends AbstractComponent { @Override public void setValue(String value) { this.text = value; + } + + @Override + public String getControlPointNodeName(int index) { + return null; } } diff --git a/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java b/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java index e3ee0662..545dca3b 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/PCBText.java @@ -311,5 +311,10 @@ public class PCBText extends AbstractComponent { } @Override - public void setValue(Void value) {} + public void setValue(Void value) {} + + @Override + public String getControlPointNodeName(int index) { + return null; + } } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java index 83e41348..9043b6e1 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -27,7 +27,7 @@ import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.GeneralPath; - + import org.diylc.common.ObjectCache; import org.diylc.components.Abstract3LegSymbol; import org.diylc.core.IDIYComponent; @@ -116,5 +116,10 @@ public class BJTSymbol extends Abstract3LegSymbol { this.polarity = polarity; body = null; + } + + @Override + public String getControlPointNodeName(int index) { + return getName() + "." + index; } } diff --git a/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java b/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java index c443eae6..9e311bd8 100644 --- a/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java +++ b/diylc/diylc-library/src/org/diylc/components/shapes/AbstractShape.java @@ -104,6 +104,11 @@ public abstract class AbstractShape extends AbstractTransparentComponent { Math.min(controlPoints[0].y, controlPoints[1].y)); secondPoint.setLocation(Math.max(controlPoints[0].x, controlPoints[1].x), Math.max(controlPoints[0].y, controlPoints[1].y)); + } + + @Override + public String getControlPointNodeName(int index) { + return null; } @Deprecated diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index cd4509ab..e91b03aa 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 235a4fa1..4daadae3 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index ec61d423..c96d346b 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2440,7 +2440,7 @@ IMPROVEMENT - Better rendering of TO-3 transformer package + Better rendering of TO-3 transistor package BUG_FIX