diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index b2fed95a..d29b74f6 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java index 9c4f89e5..8d401224 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/boards/AbstractBoard.java @@ -56,13 +56,13 @@ public abstract class AbstractBoard extends AbstractTransparentComponent - firstPoint.y); g2d.setComposite(oldComposite); } + // Do not track any changes that follow because the whole board has been + // tracked so far. + drawingObserver.stopTracking(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); g2d.drawRect(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, secondPoint.y - firstPoint.y); - // Do not track any changes that follow because the whole board has been - // tracked so far. - drawingObserver.stopTracking(); } protected void drawCoordinates(Graphics2D g2d, int spacing) { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/Line.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/Line.java index c26389a0..7521ed0c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/Line.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/connectivity/Line.java @@ -17,7 +17,7 @@ import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; -@ComponentDescriptor(name = "Line", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "LN", description = "", zOrder = IDIYComponent.COMPONENT, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) +@ComponentDescriptor(name = "Line", author = "Branislav Stojkovic", category = "Shapes", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "LN", description = "", zOrder = IDIYComponent.COMPONENT, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) public class Line extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Ellipse.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Ellipse.java new file mode 100644 index 00000000..61059925 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Ellipse.java @@ -0,0 +1,150 @@ +package org.diylc.components.shapes; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; + +import org.diylc.common.ObjectCache; +import org.diylc.components.AbstractTransparentComponent; +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.BomPolicy; +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 = "Ellipse", author = "Branislav Stojkovic", category = "Shapes", instanceNamePrefix = "ELL", description = "Elliptical area", zOrder = IDIYComponent.COMPONENT, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) +public class Ellipse extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color COLOR = Color.white; + public static Color BORDER_COLOR = Color.black; + public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); + + protected String value = ""; + protected Point[] controlPoints = new Point[] { + new Point(0, 0), + new Point((int) DEFAULT_WIDTH.convertToPixels(), + (int) DEFAULT_HEIGHT.convertToPixels()) }; + protected Point firstPoint = new Point(); + protected Point secondPoint = new Point(); + + protected Color color = COLOR; + protected Color borderColor = BORDER_COLOR; + protected Size borderThickness = new Size(0.2d, SizeUnit.mm); + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke((int) borderThickness.convertToPixels())); + + if (componentState != ComponentState.DRAGGING) { + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + g2d.setColor(color); + g2d.fillOval(firstPoint.x, firstPoint.y, secondPoint.x + - firstPoint.x, secondPoint.y - firstPoint.y); + g2d.setComposite(oldComposite); + } + // Do not track any changes that follow because the whole oval has been + // tracked so far. + drawingObserver.stopTracking(); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : borderColor); + g2d.drawOval(firstPoint.x, firstPoint.y, secondPoint.x - firstPoint.x, + secondPoint.y - firstPoint.y); + } + + @EditableProperty(name = "Color") + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } + + @EditableProperty(name = "Border thickness") + public Size getBorderThickness() { + return borderThickness; + } + + public void setBorderThickness(Size borderThickness) { + this.borderThickness = borderThickness; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + 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); + firstPoint.setLocation( + Math.min(controlPoints[0].x, controlPoints[1].x), 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 void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; + g2d.setColor(COLOR); + g2d.fillOval(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); + g2d.setColor(BORDER_COLOR); + g2d.drawOval(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); + } + + @Deprecated + @Override + public Void getValue() { + return null; + } + + @Deprecated + @Override + public void setValue(Void value) { + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Polygon.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Polygon.java new file mode 100644 index 00000000..142c1029 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Polygon.java @@ -0,0 +1,181 @@ +package org.diylc.components.shapes; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; +import java.util.Arrays; + +import org.diylc.common.ObjectCache; +import org.diylc.components.AbstractTransparentComponent; +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.BomPolicy; +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 = "Polygon", author = "Branislav Stojkovic", category = "Shapes", instanceNamePrefix = "POLY", description = "Polygonal area", zOrder = IDIYComponent.COMPONENT, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) +public class Polygon extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color COLOR = Color.white; + public static Color BORDER_COLOR = Color.black; + public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); + + protected Point[] controlPoints = new Point[] { + new Point(0, 0), + new Point(0, (int) DEFAULT_HEIGHT.convertToPixels()), + new Point((int) DEFAULT_WIDTH.convertToPixels(), + (int) DEFAULT_HEIGHT.convertToPixels()), + new Point((int) DEFAULT_WIDTH.convertToPixels(), 0) }; + + protected Color color = COLOR; + protected Color borderColor = BORDER_COLOR; + protected Size borderThickness = new Size(0.2d, SizeUnit.mm); + protected PointCount pointCount = PointCount._4; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke((int) borderThickness.convertToPixels())); + g2d.setColor(color); + int[] xPoints = new int[controlPoints.length]; + int[] yPoints = new int[controlPoints.length]; + for (int i = 0; i < controlPoints.length; i++) { + xPoints[i] = controlPoints[i].x; + yPoints[i] = controlPoints[i].y; + } + + Composite oldComposite = g2d.getComposite(); + if (this.alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(3, 1.0F * this.alpha + / MAX_ALPHA)); + } + g2d.fillPolygon(xPoints, yPoints, controlPoints.length); + g2d.setComposite(oldComposite); + + // Do not track any changes that follow because the whole board has been + // tracked so far. + drawingObserver.stopTracking(); + Color lineColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : borderColor; + g2d.setColor(lineColor); + g2d.drawPolygon(xPoints, yPoints, controlPoints.length); + } + + @EditableProperty(name = "Color") + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } + + @EditableProperty(name = "Border thickness") + public Size getBorderThickness() { + return borderThickness; + } + + public void setBorderThickness(Size borderThickness) { + this.borderThickness = borderThickness; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + 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); + } + + @EditableProperty(name = "Edges") + public PointCount getPointCount() { + return pointCount; + } + + public void setPointCount(PointCount pointCount) { + if (this.pointCount == pointCount) + return; + int oldPointCount = Integer.parseInt(this.pointCount.toString()); + int newPointCount = Integer.parseInt(pointCount.toString()); + this.controlPoints = Arrays.copyOf(this.controlPoints, newPointCount); + if (oldPointCount < newPointCount) { + this.controlPoints[newPointCount - 1] = this.controlPoints[oldPointCount - 1]; + for (int i = oldPointCount - 1; i < newPointCount - 1; i++) { + this.controlPoints[i] = new Point( + (this.controlPoints[i - 1].x + this.controlPoints[newPointCount - 1].x) / 2, + (this.controlPoints[i - 1].y + this.controlPoints[newPointCount - 1].y) / 2); + } + } + this.pointCount = pointCount; + } + + @Deprecated + @Override + public Void getValue() { + return null; + } + + @Deprecated + @Override + public void setValue(Void value) { + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; + g2d.setColor(COLOR); + int[] x = { 2 / factor, width - 2 / factor, width - 4 / factor, + 3 / factor }; + int[] y = { 4 / factor, 2 / factor, height - 5 / factor, + height - 2 / factor }; + g2d.fillPolygon(x, y, 4); + g2d.setColor(BORDER_COLOR); + g2d.drawPolygon(x, y, 4); + } + + public enum PointCount { + _3, _4, _5, _6, _7, _8; + + public String toString() { + return name().substring(1); + }; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Rectangle.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Rectangle.java new file mode 100644 index 00000000..e1ed568e --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/shapes/Rectangle.java @@ -0,0 +1,161 @@ +package org.diylc.components.shapes; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; + +import org.diylc.common.ObjectCache; +import org.diylc.components.AbstractTransparentComponent; +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.BomPolicy; +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 = "Rectangle", author = "Branislav Stojkovic", category = "Shapes", instanceNamePrefix = "RECT", description = "Ractangular area, with or withouth rounded edges", zOrder = IDIYComponent.COMPONENT, flexibleZOrder = true, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false) +public class Rectangle extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color COLOR = Color.white; + public static Color BORDER_COLOR = Color.black; + public static Size DEFAULT_WIDTH = new Size(1.5d, SizeUnit.in); + public static Size DEFAULT_HEIGHT = new Size(1.2d, SizeUnit.in); + + protected String value = ""; + protected Point[] controlPoints = new Point[] { + new Point(0, 0), + new Point((int) DEFAULT_WIDTH.convertToPixels(), + (int) DEFAULT_HEIGHT.convertToPixels()) }; + protected Point firstPoint = new Point(); + protected Point secondPoint = new Point(); + + protected Color color = COLOR; + protected Color borderColor = BORDER_COLOR; + protected Size edgeRadius = new Size(0d, SizeUnit.mm); + protected Size borderThickness = new Size(0.2d, SizeUnit.mm); + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke((int) borderThickness.convertToPixels())); + int radius = (int) edgeRadius.convertToPixels(); + if (componentState != ComponentState.DRAGGING) { + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + g2d.setColor(color); + g2d.fillRoundRect(firstPoint.x, firstPoint.y, secondPoint.x + - firstPoint.x, secondPoint.y - firstPoint.y, radius, + radius); + g2d.setComposite(oldComposite); + } + // Do not track any changes that follow because the whole rect has been + // tracked so far. + drawingObserver.stopTracking(); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : borderColor); + g2d.drawRoundRect(firstPoint.x, firstPoint.y, secondPoint.x + - firstPoint.x, secondPoint.y - firstPoint.y, radius, radius); + } + + @EditableProperty(name = "Color") + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } + + @EditableProperty(name = "Border thickness") + public Size getBorderThickness() { + return borderThickness; + } + + public void setBorderThickness(Size borderThickness) { + this.borderThickness = borderThickness; + } + + @EditableProperty(name = "Radius") + public Size getEdgeRadius() { + return edgeRadius; + } + + public void setEdgeRadius(Size edgeRadius) { + this.edgeRadius = edgeRadius; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + 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); + firstPoint.setLocation( + Math.min(controlPoints[0].x, controlPoints[1].x), 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 void drawIcon(Graphics2D g2d, int width, int height) { + int factor = 32 / width; + g2d.setColor(COLOR); + g2d.fillRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); + g2d.setColor(BORDER_COLOR); + g2d.drawRect(2 / factor, 2 / factor, width - 4 / factor, height - 4 + / factor); + } + + @Deprecated + @Override + public Void getValue() { + return null; + } + + @Deprecated + @Override + public void setValue(Void value) { + } +}