diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Template.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Template.java index 4812a7cd..eaee3557 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Template.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Template.java @@ -1,16 +1,20 @@ package org.diylc.core; +import java.awt.Point; +import java.util.List; import java.util.Map; public class Template { private String name; private Map values; + private List points; - public Template(String name, Map values) { + public Template(String name, Map values, List points) { super(); this.name = name; this.values = values; + this.points = points; } public String getName() { @@ -28,12 +32,21 @@ public class Template { public void setValues(Map values) { this.values = values; } + + public List getPoints() { + return points; + } + + public void setPoints(List points) { + this.points = points; + } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((points == null) ? 0 : points.hashCode()); result = prime * result + ((values == null) ? 0 : values.hashCode()); return result; } @@ -52,6 +65,11 @@ public class Template { return false; } else if (!name.equals(other.name)) return false; + if (points == null) { + if (other.points != null) + return false; + } else if (!points.equals(other.points)) + return false; if (values == null) { if (other.values != null) return false; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/InstantiationManager.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/InstantiationManager.java index b92e11ab..8663aee8 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/InstantiationManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/InstantiationManager.java @@ -233,6 +233,16 @@ public class InstantiationManager { component.setControlPoint(controlPoint, j); } } + // Make the component into shape from the template + if (template != null && template.getPoints() != null + && template.getPoints().size() >= component + .getControlPointCount()) { + for (int i = 0; i < component.getControlPointCount(); i++) { + Point p = new Point(component.getControlPoint(0)); + p.translate(template.getPoints().get(i).x, template.getPoints().get(i).y); + component.setControlPoint(p, i); + } + } fillWithDefaultProperties(component, template); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java index 8bf68d0c..e8906587 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java @@ -1741,7 +1741,7 @@ public class Presenter implements IPlugInPort { templateName)); if (selectedComponents.size() != 1) { throw new RuntimeException( - "Can only save a single component at a time."); + "Can only save a single component as a template at once."); } IDIYComponent component = selectedComponents.iterator().next(); ComponentType type = ComponentProcessor.getInstance() @@ -1772,7 +1772,19 @@ public class Presenter implements IPlugInPort { } catch (Exception e) { } } - Template template = new Template(templateName, values); + List points = new ArrayList(); + + for (int i = 0; i< component.getControlPointCount(); i++) { + Point p = new Point(component.getControlPoint(i)); + points.add(p); + } + int x = points.iterator().next().x; + int y = points.iterator().next().y; + for (Point point : points) { + point.translate(-x, -y); + } + + Template template = new Template(templateName, values, points); boolean exists = false; for (Template t : templates) { if (t.getName().equalsIgnoreCase(templateName)) {