diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index 2610feb0..0e500270 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3330,6 +3330,10 @@ IMPROVEMENT When rotating Vero and Tri-Pad boards, change the orientation of strips to match the rotation angle + + IMPROVEMENT + Rotating and mirroring boards that display coordinates also changes coordinate origin + BUG_FIX Dragging components from the component tree to the canvas stops working once the component type is selected in the tree diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7334b2c8..2ce92065 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/EyeletBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java index 150a5f72..d3dac9c5 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/EyeletBoard.java @@ -27,7 +27,7 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Point2D; -import org.diylc.components.transform.SimpleComponentTransformer; +import org.diylc.components.transform.AbstractBoardTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; @@ -43,7 +43,7 @@ import org.diylc.utils.Constants; @ComponentDescriptor(name = "Eyelet Board", category = "Boards", author = "Branislav Stojkovic", zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Perforated board with eyelets", bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TYPE_NAME, - transformer = SimpleComponentTransformer.class, enableCache = true) + transformer = AbstractBoardTransformer.class, enableCache = true) public class EyeletBoard extends AbstractBoard { private static final long serialVersionUID = 1L; 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 9b69ebf3..603cf31c 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/MarshallPerfBoard.java @@ -27,7 +27,7 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Point2D; -import org.diylc.components.transform.SimpleComponentTransformer; +import org.diylc.components.transform.AbstractBoardTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; @@ -45,7 +45,7 @@ import org.diylc.utils.Constants; zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Perforated board as found on some Marshall and Trainwreck amps", bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, - keywordTag = "Perf Board", transformer = SimpleComponentTransformer.class) + keywordTag = "Perf Board", transformer = AbstractBoardTransformer.class) public class MarshallPerfBoard extends AbstractBoard { private static final long serialVersionUID = 1L; 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 7908f93f..5e8bb597 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/PerfBoard.java @@ -27,7 +27,7 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Point2D; -import org.diylc.components.transform.SimpleComponentTransformer; +import org.diylc.components.transform.AbstractBoardTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; @@ -44,7 +44,7 @@ import org.diylc.utils.Constants; @ComponentDescriptor(name = "Perf Board w/ Pads", category = "Boards", author = "Branislav Stojkovic", zOrder = IDIYComponent.BOARD, instanceNamePrefix = "Board", description = "Perforated board with solder pads", bomPolicy = BomPolicy.SHOW_ONLY_TYPE_NAME, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, - keywordTag = "Perf Board", transformer = SimpleComponentTransformer.class, enableCache = true) + keywordTag = "Perf Board", transformer = AbstractBoardTransformer.class, enableCache = true) public class PerfBoard extends AbstractBoard { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/transform/AbstractBoardTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/AbstractBoardTransformer.java new file mode 100644 index 00000000..cf609d7b --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/transform/AbstractBoardTransformer.java @@ -0,0 +1,94 @@ +package org.diylc.components.transform; + +import java.awt.geom.Point2D; + +import org.diylc.common.IComponentTransformer; +import org.diylc.components.boards.AbstractBoard; +import org.diylc.components.boards.AbstractBoard.CoordinateOrigin; +import org.diylc.core.IDIYComponent; + +public class AbstractBoardTransformer extends SimpleComponentTransformer { + + @Override + public void rotate(IDIYComponent component, Point2D center, int direction) { + super.rotate(component, center, direction); + + AbstractBoard board = (AbstractBoard)component; + CoordinateOrigin origin = board.getCoordinateOrigin(); + + if (direction == IComponentTransformer.CLOCKWISE) { + switch (origin) { + case Bottom_Left: + origin = CoordinateOrigin.Top_Left; + break; + case Bottom_Right: + origin = CoordinateOrigin.Bottom_Left; + break; + case Top_Left: + origin = CoordinateOrigin.Top_Right; + break; + case Top_Right: + origin = CoordinateOrigin.Bottom_Right; + break; + } + } else { + switch (origin) { + case Bottom_Left: + origin = CoordinateOrigin.Bottom_Right; + break; + case Bottom_Right: + origin = CoordinateOrigin.Top_Right; + break; + case Top_Left: + origin = CoordinateOrigin.Bottom_Left; + break; + case Top_Right: + origin = CoordinateOrigin.Top_Left; + break; + } + } + + board.setCoordinateOrigin(origin); + } + + @Override + public void mirror(IDIYComponent component, Point2D center, int direction) { + super.mirror(component, center, direction); + + AbstractBoard board = (AbstractBoard)component; + CoordinateOrigin origin = board.getCoordinateOrigin(); + if (direction == IComponentTransformer.HORIZONTAL) { + switch (origin) { + case Bottom_Left: + origin = CoordinateOrigin.Bottom_Right; + break; + case Bottom_Right: + origin = CoordinateOrigin.Bottom_Left; + break; + case Top_Left: + origin = CoordinateOrigin.Top_Right; + break; + case Top_Right: + origin = CoordinateOrigin.Top_Left; + break; + } + } else { + switch (origin) { + case Bottom_Left: + origin = CoordinateOrigin.Top_Left; + break; + case Bottom_Right: + origin = CoordinateOrigin.Top_Right; + break; + case Top_Left: + origin = CoordinateOrigin.Bottom_Left; + break; + case Top_Right: + origin = CoordinateOrigin.Top_Right; + break; + } + } + + board.setCoordinateOrigin(origin); + } +} diff --git a/diylc/diylc-library/src/org/diylc/components/transform/VeroBoardTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/VeroBoardTransformer.java index 30ab18c6..1d8f883c 100644 --- a/diylc/diylc-library/src/org/diylc/components/transform/VeroBoardTransformer.java +++ b/diylc/diylc-library/src/org/diylc/components/transform/VeroBoardTransformer.java @@ -27,7 +27,7 @@ import org.diylc.common.OrientationHV; import org.diylc.components.boards.AbstractVeroBoard; import org.diylc.core.IDIYComponent; -public class VeroBoardTransformer extends SimpleComponentTransformer { +public class VeroBoardTransformer extends AbstractBoardTransformer { @Override public void rotate(IDIYComponent component, Point2D center, int direction) { diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 7334b2c8..2ce92065 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 a96e8a85..18e5c9b1 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ