diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java index 12797e8e..299cc91e 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -32,6 +32,7 @@ import java.lang.reflect.Modifier; import java.util.Arrays; import org.diylc.core.IDIYComponent; +import org.diylc.core.Project; import org.diylc.core.annotations.EditableProperty; /** @@ -258,5 +259,10 @@ public abstract class AbstractComponent implements IDIYComponent { @Override public Rectangle2D getCachingBounds() { return null; + } + + @Override + public void createdIn(Project project) { + // TODO Auto-generated method stub } } diff --git a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java index af552ad9..e2fd9456 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -196,5 +196,12 @@ public interface IDIYComponent extends Serializable, Cloneable { * Used only if {@link ComponentDescriptor#enableCache()} is set to true. * @return */ - Rectangle2D getCachingBounds(); + Rectangle2D getCachingBounds(); + + /** + * Notifies the component that it's being created in the context of the specified project + * + * @param project + */ + void createdIn(Project project); } diff --git a/diylc/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java b/diylc/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java index 83a45b58..b6e9e3c8 100644 --- a/diylc/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java +++ b/diylc/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java @@ -32,7 +32,7 @@ import java.text.Format; * * @param */ -public class AbstractMeasure> implements Serializable, Cloneable { +public abstract class AbstractMeasure> implements Serializable, Cloneable { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java b/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java index 6a4f10c3..9a7c12db 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java +++ b/diylc/diylc-core/src/org/diylc/presenter/CalcUtils.java @@ -48,6 +48,13 @@ public class CalcUtils { point.setLocation(x, y); } + public static Size findClosestMultiplierOf(Size factor, Size target, int step) { + Size ret = new Size(0d, factor.getUnit()); + while (ret.convertToPixels() < target.convertToPixels()) + ret = new Size(ret.getValue() + factor.getValue() * step, factor.getUnit()); + return ret; + } + public static void snapPointToObjects(Point2D point, Size gridSpacing, IDIYComponent component, List> components) { for (IDIYComponent c : components) { if (c == component) diff --git a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java index 7b0e0970..363cec5c 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/InstantiationManager.java @@ -260,7 +260,8 @@ public class InstantiationManager { LOG.info("Instatiating component of type: " + componentType.getInstanceClass().getName()); // Instantiate the component. - IDIYComponent component = componentType.getInstanceClass().newInstance(); + IDIYComponent component = componentType.getInstanceClass().newInstance(); + component.createdIn(currentProject); component.setName(createUniqueName(componentType, currentProject.getComponents())); diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 5674717c..f00c2b42 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3290,6 +3290,10 @@ IMPROVEMENT macOS: two finger click shows the popup menu without deselecting a selected component + + IMPROVEMENT + Fixed issues when creating leaded components using drag and drop with 'Snap to Grid' option switched on using a metric grid spacing (e.g. 1mm) + IMPROVEMENT Do not allow for components like traces, jumpers and wires to be reduced to nothing by dragging connected components @@ -3300,7 +3304,7 @@ IMPROVEMENT - Moving a rigid component (e.g. tube/transistor symbol) which is not snapped to grid makes it snap back to the grid when 'Snap to Grid' is switched on + Moving a rigid component (e.g. tube/transistor symbol) which is not snapped to grid makes it snap back to the grid when 'Snap to Grid' option is switched on IMPROVEMENT diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 76991711..7334b2c8 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/AbstractLeadedComponent.java b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java index bc79aa5e..c8575a94 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java @@ -52,6 +52,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.PositiveNonZeroMeasureValidator; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; +import org.diylc.presenter.CalcUtils; import org.diylc.utils.Constants; /** @@ -102,6 +103,13 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } points[2] = calculateLabelPosition(points[0], points[1]); } + + @Override + public void createdIn(Project project) { + double targetSize = CalcUtils.findClosestMultiplierOf(project.getGridSpacing(), DEFAULT_SIZE, 2).convertToPixels(); + points[0]= new Point2D.Double(-targetSize / 2, 0); + points[1] = new Point2D.Double(targetSize / 2, 0); + } protected boolean IsCopperArea() { return false; diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 46826fea..7334b2c8 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 580bc6de..a96e8a85 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ