From f37e0dfc9510dfe7573bc662d9f99e74671f7a20 Mon Sep 17 00:00:00 2001 From: bancika Date: Mon, 17 Jan 2011 19:46:42 +0000 Subject: [PATCH] setup sticky and visibility policy for each point inidividually --- .../DIYLC/library/main.jar | Bin 520311 -> 521321 bytes .../src/org/diylc/common/ComponentType.java | 10 +--- .../components/AbstractCurvedComponent.java | 11 +++++ .../components/AbstractLeadedComponent.java | 16 ++++++- .../src/org/diylc/core/IDIYComponent.java | 4 ++ .../core/annotations/ComponentDescriptor.java | 5 -- .../diylc/presenter/ComponentProcessor.java | 9 ++-- .../src/org/diylc/presenter/Presenter.java | 29 +++++------ .../org/diylc/presenter/ProjectPainter.java | 27 +++++++---- .../diylc/components/MockDIYComponent.java | 11 +++++ .../components/boards/AbstractBoard.java | 11 +++++ .../components/connectivity/CopperTrace.java | 2 +- .../components/connectivity/CurvedTrace.java | 2 +- .../components/connectivity/HookupWire.java | 2 +- .../diylc/components/connectivity/Jumper.java | 2 +- .../components/connectivity/SolderPad.java | 13 ++++- .../components/connectivity/TraceCut.java | 45 +++++++++++++++++- .../electromechanical/MiniToggleSwitch.java | 13 ++++- .../src/org/diylc/components/misc/BOM.java | 11 +++++ .../components/misc/ProjectInformation.java | 11 +++++ .../passive/AxialFilmCapacitor.java | 2 +- .../passive/RadialCeramicDiskCapacitor.java | 2 +- .../passive/RadialFilmCapacitor.java | 2 +- .../diylc/components/passive/Resistor.java | 2 +- .../components/semiconductors/DIL_IC.java | 13 ++++- 25 files changed, 198 insertions(+), 57 deletions(-) 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 c66b9ed3e4515469267b16e9289571b8dfdf540d..d035c3c6301632e8ec659f451b0de915cfca8b94 100644 GIT binary patch delta 37973 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%0Ao60VCaGDJ;yBdru? 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 instanceClass; private double zOrder; private boolean stretchable; - private boolean sticky; public ComponentType(String name, String description, CreationMethod creationMethod, String category, String namePrefix, String author, Icon icon, - Class instanceClass, double zOrder, boolean stretchable, - boolean sticky) { + Class instanceClass, double zOrder, boolean stretchable) { super(); this.name = name; this.description = description; @@ -42,7 +39,6 @@ public class ComponentType { this.instanceClass = instanceClass; this.zOrder = zOrder; this.stretchable = stretchable; - this.sticky = sticky; } public String getName() { @@ -85,10 +81,6 @@ public class ComponentType { return stretchable; } - public boolean isSticky() { - return sticky; - } - @Override public String toString() { return name; 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 4fca231f..b618db56 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 @@ -11,6 +11,7 @@ import java.awt.geom.CubicCurve2D; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @@ -98,6 +99,16 @@ public abstract class AbstractCurvedComponent extends AbstractTransparentComp return controlPoints.length; } + @Override + public boolean isControlPointSticky(int index) { + return index == 0 || index == 3; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return index == 0 || index == 3 ? VisibilityPolicy.ALWAYS : VisibilityPolicy.WHEN_SELECTED; + } + @Override public Point getControlPoint(int index) { return controlPoints[index]; diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java index d80fcae4..02b27abe 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java @@ -15,6 +15,7 @@ import org.diylc.common.Display; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @@ -167,9 +168,22 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp return (Point) points[index]; } + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.ALWAYS; + } + @Override public void setControlPoint(Point point, int index) { - points[index].setLocation(point); + // Only accept the change if ending points are not the same. + if (!point.equals(points[1 - index])) { + points[index].setLocation(point); + } } @EditableProperty(name = "Color") diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java index c6d76b90..b6671f9a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/IDIYComponent.java @@ -86,6 +86,10 @@ public interface IDIYComponent extends Serializable { * @param index */ void setControlPoint(Point point, int index); + + boolean isControlPointSticky(int index); + + VisibilityPolicy getControlPointVisibilityPolicy(int index); /** * Draws the component onto the {@link Graphics2D}. diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/annotations/ComponentDescriptor.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/annotations/ComponentDescriptor.java index d03c1af6..c9bbaa21 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/annotations/ComponentDescriptor.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/annotations/ComponentDescriptor.java @@ -59,9 +59,4 @@ public @interface ComponentDescriptor { */ boolean stretchable() default true; - /** - * @return true, if control points may stick to other components' control - * points. - */ - boolean sticky() default false; } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ComponentProcessor.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ComponentProcessor.java index 3dd4d1d6..95fa95a2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ComponentProcessor.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ComponentProcessor.java @@ -62,7 +62,6 @@ public class ComponentProcessor { Icon icon; double zOrder; boolean stretchable; - boolean sticky; if (clazz.isAnnotationPresent(ComponentDescriptor.class)) { ComponentDescriptor annotation = clazz.getAnnotation(ComponentDescriptor.class); name = annotation.name(); @@ -73,7 +72,6 @@ public class ComponentProcessor { author = annotation.author(); zOrder = annotation.zOrder(); stretchable = annotation.stretchable(); - sticky = annotation.sticky(); } else { name = clazz.getSimpleName(); description = ""; @@ -83,7 +81,6 @@ public class ComponentProcessor { author = "Unknown"; zOrder = IDIYComponent.COMPONENT; stretchable = true; - sticky = false; } icon = null; // Draw component icon. @@ -92,7 +89,9 @@ public class ComponentProcessor { Image image = new BufferedImage(Presenter.ICON_SIZE, Presenter.ICON_SIZE, java.awt.image.BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = (Graphics2D) image.getGraphics(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d + .setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); componentInstance.drawIcon(g2d, Presenter.ICON_SIZE, Presenter.ICON_SIZE); icon = new ImageIcon(image); } catch (InstantiationException e) { @@ -101,7 +100,7 @@ public class ComponentProcessor { e.printStackTrace(); } ComponentType componentType = new ComponentType(name, description, creationMethod, - category, namePrefix, author, icon, clazz, zOrder, stretchable, sticky); + category, namePrefix, author, icon, clazz, zOrder, stretchable); return componentType; } 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 bd5bdd77..bc0eb03c 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 @@ -306,14 +306,15 @@ public class Presenter implements IPlugInPort { if (currentProject == null) { return; } - Set> drawControlPoints = new HashSet>(); + Set> groupedComponents = new HashSet>(); for (IDIYComponent component : currentProject.getComponents()) { - if (shouldShowControlPointsFor(component)) { - drawControlPoints.add(component); + // Only try to draw control points of ungrouped + if (findAllGroupedComponents(component).size() > 1) { + groupedComponents.add(component); } } projectPainter.drawProject(g2d, currentProject, drawOptions, filter, selectionRect, - selectedComponents, drawControlPoints, Arrays.asList(controlPointSlot, + selectedComponents, groupedComponents, Arrays.asList(controlPointSlot, potentialControlPoint), dragInProgress, zoomLevel); } @@ -569,13 +570,14 @@ public class Presenter implements IPlugInPort { for (IDIYComponent component : currentProject.getComponents()) { // Do not process a component if it's already in the map. ComponentType componentType = componentTypeMap.get(component.getClass().getName()); - if (!controlPointMap.containsKey(component) && componentType.isSticky()) { - // Check if there's a control point in the current selection - // that matches with one of its control points. - for (int i = 0; i < component.getControlPointCount(); i++) { - if (controlPointMap.containsKey(component)) { - break; - } + + // Check if there's a control point in the current selection + // that matches with one of its control points. + for (int i = 0; i < component.getControlPointCount(); i++) { + if (controlPointMap.containsKey(component)) { + break; + } + if (!controlPointMap.containsKey(component) && component.isControlPointSticky(i)) { boolean componentMatches = false; for (Map.Entry, Set> entry : controlPointMap .entrySet()) { @@ -1154,11 +1156,6 @@ public class Presenter implements IPlugInPort { * component. */ private boolean shouldShowControlPointsFor(IDIYComponent component) { - ComponentType componentType = componentTypeMap.get(component.getClass().getName()); - // Do not show control points for non-stretchable components. - if (!componentType.isStretchable()) { - return false; - } if (findAllGroupedComponents(component).size() > 1) { return false; } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectPainter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectPainter.java index e2623d70..64aa00a6 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectPainter.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/ProjectPainter.java @@ -22,6 +22,7 @@ import org.diylc.common.IComponentFiler; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.utils.Constants; /** @@ -50,7 +51,7 @@ public class ProjectPainter { public void drawProject(Graphics2D g2d, Project project, Set drawOptions, IComponentFiler filter, Rectangle selectionRect, ComponentSelection selectedComponents, - Set> drawControlPoints, List controlPointSlot, + Set> groupedComponents, List controlPointSlot, boolean dragInProgress, double zoomLevel) { if (project == null) { return; @@ -137,10 +138,17 @@ public class ProjectPainter { if (drawOptions.contains(DrawOption.CONTROL_POINTS)) { // Draw unselected points first to make sure they are below. for (IDIYComponent component : project.getComponents()) { - if (drawControlPoints.contains(component) - && !selectedComponents.contains(component)) { - g2dWrapper.setColor(Constants.CONTROL_POINT_COLOR); - for (int i = 0; i < component.getControlPointCount(); i++) { + for (int i = 0; i < component.getControlPointCount(); i++) { + VisibilityPolicy visibilityPolicy = component + .getControlPointVisibilityPolicy(i); + if ((groupedComponents.contains(component) + && (visibilityPolicy == VisibilityPolicy.ALWAYS || (selectedComponents + .contains(component) && visibilityPolicy == VisibilityPolicy.WHEN_SELECTED)) || (!groupedComponents + .contains(component) + && !selectedComponents.contains(component) && component + .getControlPointVisibilityPolicy(i) == VisibilityPolicy.ALWAYS))) { + g2dWrapper.setColor(Constants.CONTROL_POINT_COLOR); + Point controlPoint = component.getControlPoint(i); int pointSize = CONTROL_POINT_SIZE - 2; g2dWrapper.fillOval(controlPoint.x - pointSize / 2, controlPoint.y @@ -150,9 +158,12 @@ public class ProjectPainter { } // Then draw the selected ones. for (IDIYComponent component : selectedComponents) { - if (drawControlPoints.contains(component)) { - g2dWrapper.setColor(Constants.SELECTED_CONTROL_POINT_COLOR); - for (int i = 0; i < component.getControlPointCount(); i++) { + for (int i = 0; i < component.getControlPointCount(); i++) { + if (!groupedComponents.contains(component) + && (component.getControlPointVisibilityPolicy(i) == VisibilityPolicy.WHEN_SELECTED || component + .getControlPointVisibilityPolicy(i) == VisibilityPolicy.ALWAYS)) { + g2dWrapper.setColor(Constants.SELECTED_CONTROL_POINT_COLOR); + Point controlPoint = component.getControlPoint(i); int pointSize = CONTROL_POINT_SIZE; g2dWrapper.fillOval(controlPoint.x - pointSize / 2, controlPoint.y diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java index 3c5cd5fb..72f10edf 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/test/org/diylc/components/MockDIYComponent.java @@ -8,6 +8,7 @@ import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Capacitance; @@ -59,6 +60,16 @@ public class MockDIYComponent implements IDIYComponent { return 1; } + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + @Override public Point getControlPoint(int index) { return leftTopCorner; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java index 05a2a88b..51706ef5 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/AbstractBoard.java @@ -10,6 +10,7 @@ import org.diylc.components.AbstractTransparentComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @@ -84,6 +85,16 @@ public abstract class AbstractBoard extends AbstractTransparentComponent return controlPoints[index]; } + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + @Override public void setControlPoint(Point point, int index) { controlPoints[index].setLocation(point); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java index acc7c371..2d53b1b4 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java @@ -14,7 +14,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace", description = "", zOrder = IDIYComponent.ABOVE_BOARD, sticky = true) +@ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace", description = "", zOrder = IDIYComponent.ABOVE_BOARD) public class CopperTrace extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java index 96d548d4..3ec83251 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -13,7 +13,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Curved Trace", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "Trace", description = "Curved copper trace with two control points", zOrder = IDIYComponent.ABOVE_BOARD, sticky = true) +@ComponentDescriptor(name = "Curved Trace", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "Trace", description = "Curved copper trace with two control points", zOrder = IDIYComponent.ABOVE_BOARD) public class CurvedTrace extends AbstractCurvedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java index 56f2a952..f2f17306 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/HookupWire.java @@ -12,7 +12,7 @@ import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.utils.Constants; -@ComponentDescriptor(name = "Hookup Wire", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "W", description = "Flexible wire with two control points", zOrder = IDIYComponent.ABOVE_COMPONENT, sticky = true) +@ComponentDescriptor(name = "Hookup Wire", author = "Branislav Stojkovic", category = "Connectivity", instanceNamePrefix = "W", description = "Flexible wire with two control points", zOrder = IDIYComponent.ABOVE_COMPONENT) public class HookupWire extends AbstractCurvedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java index d792478f..28db2434 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java @@ -13,7 +13,7 @@ import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; -@ComponentDescriptor(name = "Jumper", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "J", description = "", zOrder = IDIYComponent.ABOVE_BOARD, sticky = true) +@ComponentDescriptor(name = "Jumper", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "J", description = "", zOrder = IDIYComponent.ABOVE_BOARD) public class Jumper extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java index 66b8ad22..5eea2c65 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/SolderPad.java @@ -9,13 +9,14 @@ import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +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 = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Pad", stretchable = false, zOrder = IDIYComponent.ABOVE_BOARD + 0.1, sticky = true) +@ComponentDescriptor(name = "Solder Pad", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Pad", stretchable = false, zOrder = IDIYComponent.ABOVE_BOARD + 0.1) public class SolderPad extends AbstractComponent { private static final long serialVersionUID = 1L; @@ -72,6 +73,16 @@ public class SolderPad extends AbstractComponent { return 1; } + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + @Override public Point getControlPoint(int index) { return point; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java index 595e1987..694d3dc2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java @@ -2,12 +2,14 @@ package org.diylc.components.connectivity; import java.awt.Color; import java.awt.Graphics2D; +import java.awt.Point; -import org.diylc.components.AbstractSinglePointComponent; +import org.diylc.components.AbstractComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; @@ -15,7 +17,7 @@ import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; @ComponentDescriptor(name = "Trace Cut", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Cut", stretchable = false, zOrder = IDIYComponent.ABOVE_BOARD) -public class TraceCut extends AbstractSinglePointComponent { +public class TraceCut extends AbstractComponent { private static final long serialVersionUID = 1L; @@ -27,6 +29,8 @@ public class TraceCut extends AbstractSinglePointComponent { private Size size = SIZE; private Color fillColor = FILL_COLOR; private Color borderColor = BORDER_COLOR; + + protected Point point = new Point(0, 0); @Override public void draw(Graphics2D g2d, ComponentState componentState, Project project, @@ -57,6 +61,43 @@ public class TraceCut extends AbstractSinglePointComponent { dotDiameter); } + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public Point getControlPoint(int index) { + return point; + } + + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + + @Override + public void setControlPoint(Point point, int index) { + this.point.setLocation(point); + } + + @Deprecated + @Override + public Void getValue() { + return null; + } + + @Deprecated + @Override + public void setValue(Void value) { + } + @EditableProperty public Size getSize() { return size; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index aff26f03..5188fdf6 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -14,12 +14,13 @@ import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +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; -@ComponentDescriptor(name = "Mini Toggle Switch", category = "Electromechanical", author = "Branislav Stojkovic", description = "", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW", sticky = true) +@ComponentDescriptor(name = "Mini Toggle Switch", category = "Electromechanical", author = "Branislav Stojkovic", description = "", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW") public class MiniToggleSwitch extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -115,6 +116,16 @@ public class MiniToggleSwitch extends AbstractTransparentComponent { public Point getControlPoint(int index) { return point; } + + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } @Override public void setControlPoint(Point point, int index) { diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java index 4fe87e63..7be9270e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/misc/ProjectInformation.java @@ -12,6 +12,7 @@ import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @@ -81,6 +82,16 @@ public class ProjectInformation extends AbstractComponent { return point; } + @Override + public boolean isControlPointSticky(int index) { + return false; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + @Override public void setControlPoint(Point point, int index) { this.point.setLocation(point); diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java index 2484ae04..93431dba 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.CapacitanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Axial Film Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT, sticky = true) +@ComponentDescriptor(name = "Axial Film Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT) public class AxialFilmCapacitor extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java index 6d07405c..7257c1f2 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.CapacitanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Ceramic Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT, sticky = true) +@ComponentDescriptor(name = "Ceramic Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT) public class RadialCeramicDiskCapacitor extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialFilmCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialFilmCapacitor.java index 373bb68d..e015e8d3 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialFilmCapacitor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialFilmCapacitor.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.CapacitanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Radial Film Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT, sticky = true) +@ComponentDescriptor(name = "Radial Film Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT) public class RadialFilmCapacitor extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java index 340db6f2..d026ea9c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.ResistanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Resistor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "R", description = "test", zOrder = IDIYComponent.COMPONENT, sticky = true) +@ComponentDescriptor(name = "Resistor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "R", description = "test", zOrder = IDIYComponent.COMPONENT) public class Resistor extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java index edb53cf9..51809a82 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -18,13 +18,14 @@ import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; +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 = "DIL IC", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "IC", description = "test", stretchable = false, zOrder = IDIYComponent.COMPONENT, sticky = true) +@ComponentDescriptor(name = "DIL IC", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "IC", description = "test", stretchable = false, zOrder = IDIYComponent.COMPONENT) public class DIL_IC extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -124,6 +125,16 @@ public class DIL_IC extends AbstractTransparentComponent { public Point getControlPoint(int index) { return controlPoints[index]; } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } @Override public void setControlPoint(Point point, int index) {