Fixed a bug which occurs if ESC is pressed while simulation is running.

This commit is contained in:
hneemann 2017-03-05 20:17:29 +01:00
parent 204f80aebd
commit 66d9813c7c
2 changed files with 57 additions and 6 deletions

View File

@ -375,10 +375,20 @@ public class VisualElement implements Drawable, Moveable, AttributeListener {
getElementAttributes().set(Keys.ROTATE, new Rotation(rotate));
}
/**
* Set the orientation of the element.
*
* @param rotation rotation
*/
public void setRotation(int rotation) {
getElementAttributes().set(Keys.ROTATE, new Rotation(rotation));
}
/**
* @return true if one can interact with this element
*/
public boolean isInteractable() {
return interactor != null;
}
}

View File

@ -157,14 +157,10 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
Action escapeAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (activeMouseController != mouseNormal) {
mouseNormal.activate();
removeHighLighted();
}
activeMouseController.escapePressed();
}
};
AbstractAction programAction = new AbstractAction(Lang.get("menu_programDiode")) {
@Override
public void actionPerformed(ActionEvent e) {
@ -706,6 +702,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
public void rotate() {
}
public void escapePressed() {
}
}
private final class MouseControllerNormal extends MouseController {
@ -820,11 +819,18 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
element.rotate();
repaint();
}
@Override
public void escapePressed() {
mouseNormal.activate();
}
}
private final class MouseControllerMoveElement extends MouseController {
private VisualElement visualElement;
private Vector delta;
private Vector initialPos;
private int initialRot;
private MouseControllerMoveElement(Cursor cursor) {
super(cursor);
@ -833,7 +839,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
private void activate(VisualElement visualElement, Vector pos) {
super.activate();
this.visualElement = visualElement;
delta = visualElement.getPos().sub(pos);
initialPos = visualElement.getPos();
initialRot = visualElement.getRotate();
delta = initialPos.sub(pos);
deleteAction.setActive(true);
rotateAction.setEnabled(true);
hasChanged();
@ -871,11 +879,19 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
circuit.modified();
hasChanged();
}
@Override
public void escapePressed() {
visualElement.setPos(raster(initialPos));
visualElement.setRotation(initialRot);
mouseNormal.activate();
}
}
private final class MouseControllerMoveWire extends MouseController {
private Wire wire;
private Vector pos;
private Vector initialPos;
private MouseControllerMoveWire(Cursor cursor) {
super(cursor);
@ -885,6 +901,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
super.activate();
this.wire = wire;
this.pos = raster(pos);
this.initialPos=this.pos;
deleteAction.setActive(true);
removeHighLighted();
hasChanged();
@ -923,6 +940,14 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
// ensure that highlighted wire is visible by drawing it on top of other drawings.
wire.drawTo(gr, true);
}
@Override
public void escapePressed() {
wire.move(initialPos.sub(pos));
removeHighLighted();
circuit.elementsMoved();
mouseNormal.activate();
}
}
@ -962,6 +987,11 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
public void drawTo(Graphic gr) {
wire.drawTo(gr, false);
}
@Override
public void escapePressed() {
mouseNormal.activate();
}
}
private final class MouseControllerSelect extends MouseController {
@ -1057,6 +1087,12 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
mouseMoveSelected.activate(corner1, corner2, lastMousePos);
mouseMoveSelected.rotate();
}
@Override
public void escapePressed() {
removeHighLighted();
mouseNormal.activate();
}
}
private void rotateElements(ArrayList<Moveable> elements, Vector pos) {
@ -1212,6 +1248,11 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
public void rotate() {
rotateElements(elements, lastPos);
}
@Override
public void escapePressed() {
mouseNormal.activate();
}
}