mirror of
https://github.com/hneemann/Digital.git
synced 2025-10-03 18:02:36 -04:00
new wire drawing mode
This commit is contained in:
parent
44bca8c0bc
commit
2d0b46c8ea
@ -87,6 +87,16 @@ public class Wire implements Drawable, Movable {
|
|||||||
return p1;
|
return p1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for point 1.
|
||||||
|
* Is used to move the line with the mouse
|
||||||
|
*
|
||||||
|
* @param p1 the new point
|
||||||
|
*/
|
||||||
|
public void setP1(Vector p1) {
|
||||||
|
this.p1 = p1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setter for point 2.
|
* Setter for point 2.
|
||||||
* Is used to move the line with the mouse
|
* Is used to move the line with the mouse
|
||||||
|
@ -67,7 +67,8 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
private final MouseControllerInsertElement mouseInsertElement;
|
private final MouseControllerInsertElement mouseInsertElement;
|
||||||
private final MouseControllerMoveElement mouseMoveElement;
|
private final MouseControllerMoveElement mouseMoveElement;
|
||||||
private final MouseControllerMoveWire mouseMoveWire;
|
private final MouseControllerMoveWire mouseMoveWire;
|
||||||
private final MouseControllerWire mouseWire;
|
private final MouseControllerWireDiag mouseWireDiag;
|
||||||
|
private final MouseControllerWireRect mouseWireRect;
|
||||||
private final MouseControllerSelect mouseSelect;
|
private final MouseControllerSelect mouseSelect;
|
||||||
private final MouseControllerMoveSelected mouseMoveSelected;
|
private final MouseControllerMoveSelected mouseMoveSelected;
|
||||||
private final MouseController mouseRun;
|
private final MouseController mouseRun;
|
||||||
@ -205,7 +206,8 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
mouseInsertList = new MouseControllerInsertCopied(normalCursor);
|
mouseInsertList = new MouseControllerInsertCopied(normalCursor);
|
||||||
mouseMoveElement = new MouseControllerMoveElement(normalCursor);
|
mouseMoveElement = new MouseControllerMoveElement(normalCursor);
|
||||||
mouseMoveWire = new MouseControllerMoveWire(normalCursor);
|
mouseMoveWire = new MouseControllerMoveWire(normalCursor);
|
||||||
mouseWire = new MouseControllerWire(normalCursor);
|
mouseWireRect = new MouseControllerWireRect(normalCursor);
|
||||||
|
mouseWireDiag = new MouseControllerWireDiag(normalCursor);
|
||||||
mouseSelect = new MouseControllerSelect(new Cursor(Cursor.CROSSHAIR_CURSOR));
|
mouseSelect = new MouseControllerSelect(new Cursor(Cursor.CROSSHAIR_CURSOR));
|
||||||
mouseMoveSelected = new MouseControllerMoveSelected(moveCursor);
|
mouseMoveSelected = new MouseControllerMoveSelected(moveCursor);
|
||||||
mouseRun = new MouseControllerRun(normalCursor);
|
mouseRun = new MouseControllerRun(normalCursor);
|
||||||
@ -282,8 +284,10 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
* @param modification the modification
|
* @param modification the modification
|
||||||
*/
|
*/
|
||||||
public void modify(Modification modification) {
|
public void modify(Modification modification) {
|
||||||
modification.modify(circuit);
|
if (modification != null) {
|
||||||
addModificationAlreadyMade(modification);
|
modification.modify(circuit);
|
||||||
|
addModificationAlreadyMade(modification);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -292,14 +296,16 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
* @param modification the modification
|
* @param modification the modification
|
||||||
*/
|
*/
|
||||||
private void addModificationAlreadyMade(Modification modification) {
|
private void addModificationAlreadyMade(Modification modification) {
|
||||||
while (modifications.size() > undoPosition)
|
if (modification != null) {
|
||||||
modifications.remove(modifications.size() - 1);
|
while (modifications.size() > undoPosition)
|
||||||
redoAction.setEnabled(false);
|
modifications.remove(modifications.size() - 1);
|
||||||
modifications.add(modification);
|
redoAction.setEnabled(false);
|
||||||
undoPosition = modifications.size();
|
modifications.add(modification);
|
||||||
undoAction.setEnabled(true);
|
undoPosition = modifications.size();
|
||||||
circuit.modified();
|
undoAction.setEnabled(true);
|
||||||
hasChanged();
|
circuit.modified();
|
||||||
|
hasChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -926,7 +932,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
VisualElement vp = getVisualElement(pos, false);
|
VisualElement vp = getVisualElement(pos, false);
|
||||||
if (vp != null) {
|
if (vp != null) {
|
||||||
if (circuit.isPinPos(raster(pos), vp) && !e.isControlDown()) {
|
if (circuit.isPinPos(raster(pos), vp) && !e.isControlDown()) {
|
||||||
if (!isLocked()) mouseWire.activate(pos);
|
if (!isLocked()) mouseWireRect.activate(pos);
|
||||||
} else
|
} else
|
||||||
mouseMoveElement.activate(vp, pos);
|
mouseMoveElement.activate(vp, pos);
|
||||||
} else if (!isLocked()) {
|
} else if (!isLocked()) {
|
||||||
@ -935,7 +941,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
if (wire != null)
|
if (wire != null)
|
||||||
mouseMoveWire.activate(wire, pos);
|
mouseMoveWire.activate(wire, pos);
|
||||||
} else if (!focusWasLost)
|
} else if (!focusWasLost)
|
||||||
mouseWire.activate(pos);
|
mouseWireRect.activate(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
focusWasLost = false;
|
focusWasLost = false;
|
||||||
@ -1157,17 +1163,20 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private final class MouseControllerWire extends MouseController {
|
private final class MouseControllerWireDiag extends MouseController {
|
||||||
private Wire wire;
|
private Wire wire;
|
||||||
|
|
||||||
private MouseControllerWire(Cursor cursor) {
|
private MouseControllerWireDiag(Cursor cursor) {
|
||||||
super(cursor);
|
super(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void activate(Vector startPos) {
|
private void activate(Vector startPos) {
|
||||||
|
activate(startPos, startPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void activate(Vector startPos, Vector endPos) {
|
||||||
super.activate();
|
super.activate();
|
||||||
Vector pos = raster(startPos);
|
wire = new Wire(raster(startPos), raster(endPos));
|
||||||
wire = new Wire(pos, pos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1181,11 +1190,11 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
if (e.getButton() == MouseEvent.BUTTON3)
|
if (e.getButton() == MouseEvent.BUTTON3)
|
||||||
mouseNormal.activate();
|
mouseNormal.activate();
|
||||||
else {
|
else {
|
||||||
modify(new ModifyInsertWire(wire));
|
modify(new ModifyInsertWire(wire).checkIfLenZero());
|
||||||
if (circuit.isPinPos(wire.p2))
|
if (circuit.isPinPos(wire.p2))
|
||||||
mouseNormal.activate();
|
mouseNormal.activate();
|
||||||
else
|
else
|
||||||
wire = new Wire(wire.p2, wire.p2);
|
mouseWireRect.activate(wire.p2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1200,6 +1209,83 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final class MouseControllerWireRect extends MouseController {
|
||||||
|
private Wire wire1;
|
||||||
|
private Wire wire2;
|
||||||
|
private boolean selectionMade;
|
||||||
|
private boolean firstHori;
|
||||||
|
private Vector initialPos;
|
||||||
|
|
||||||
|
private MouseControllerWireRect(Cursor cursor) {
|
||||||
|
super(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void activate(Vector startPos) {
|
||||||
|
super.activate();
|
||||||
|
initialPos = raster(startPos);
|
||||||
|
wire1 = new Wire(initialPos, initialPos);
|
||||||
|
wire2 = new Wire(initialPos, initialPos);
|
||||||
|
selectionMade = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void moved(MouseEvent e) {
|
||||||
|
Vector p = raster(getPosVector(e));
|
||||||
|
if (!selectionMade) {
|
||||||
|
Vector delta = p.sub(initialPos);
|
||||||
|
boolean dx = Math.abs(delta.x) > DRAG_DISTANCE;
|
||||||
|
boolean dy = Math.abs(delta.y) > DRAG_DISTANCE;
|
||||||
|
if (dx || dy) {
|
||||||
|
firstHori = dx;
|
||||||
|
selectionMade = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector pm;
|
||||||
|
if (firstHori)
|
||||||
|
pm = new Vector(p.x, wire1.p1.y);
|
||||||
|
else
|
||||||
|
pm = new Vector(wire1.p1.x, p.y);
|
||||||
|
wire1.setP2(pm);
|
||||||
|
wire2.setP1(pm);
|
||||||
|
wire2.setP2(p);
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void clicked(MouseEvent e) {
|
||||||
|
if (e.getButton() == MouseEvent.BUTTON3)
|
||||||
|
mouseNormal.activate();
|
||||||
|
else {
|
||||||
|
modify(new Modifications.Builder()
|
||||||
|
.add(new ModifyInsertWire(wire1).checkIfLenZero())
|
||||||
|
.add(new ModifyInsertWire(wire2).checkIfLenZero())
|
||||||
|
.build());
|
||||||
|
if (circuit.isPinPos(wire2.p2))
|
||||||
|
mouseNormal.activate();
|
||||||
|
else {
|
||||||
|
initialPos = wire2.p2;
|
||||||
|
selectionMade = false;
|
||||||
|
wire1 = new Wire(wire2.p2, wire2.p2);
|
||||||
|
wire2 = new Wire(wire2.p2, wire2.p2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawTo(Graphic gr) {
|
||||||
|
wire1.drawTo(gr, false);
|
||||||
|
wire2.drawTo(gr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void escapePressed() {
|
||||||
|
mouseWireDiag.activate(initialPos, wire2.p2);
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private final class MouseControllerSelect extends MouseController {
|
private final class MouseControllerSelect extends MouseController {
|
||||||
private static final int MIN_SIZE = 8;
|
private static final int MIN_SIZE = 8;
|
||||||
private Vector corner1;
|
private Vector corner1;
|
||||||
|
@ -41,7 +41,8 @@ public final class Modifications implements Modification {
|
|||||||
* @return this for chained calls
|
* @return this for chained calls
|
||||||
*/
|
*/
|
||||||
public Builder add(Modification m) {
|
public Builder add(Modification m) {
|
||||||
list.add(m);
|
if (m != null)
|
||||||
|
list.add(m);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +52,13 @@ public final class Modifications implements Modification {
|
|||||||
* @return the unified modification
|
* @return the unified modification
|
||||||
*/
|
*/
|
||||||
public Modification build() {
|
public Modification build() {
|
||||||
return new Modifications(list);
|
if (list.isEmpty())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (list.size() == 1)
|
||||||
|
return list.get(0);
|
||||||
|
else
|
||||||
|
return new Modifications(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,4 +26,14 @@ public class ModifyInsertWire implements Modification {
|
|||||||
public void modify(Circuit circuit) {
|
public void modify(Circuit circuit) {
|
||||||
circuit.add(new Wire(p1, p2));
|
circuit.add(new Wire(p1, p2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null if this is a wire with zero length
|
||||||
|
*/
|
||||||
|
public Modification checkIfLenZero() {
|
||||||
|
if ((p1.x == p2.x) && (p1.y == p2.y))
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user