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