CircuitPanelMouseAdapter: part rotation was blocked by wire

This commit is contained in:
Patrick Haßel 2024-12-05 15:54:40 +01:00
parent 621a14bc8d
commit 8c1555330b
2 changed files with 29 additions and 27 deletions

View File

@ -40,7 +40,7 @@ public class CircuitPanel extends JPanel {
public void paint(final Graphics graphics) { public void paint(final Graphics graphics) {
final Graphics2D g = (Graphics2D) graphics; final Graphics2D g = (Graphics2D) graphics;
CircuitPainter.draw(g, circuit, getWidth(), getHeight()); CircuitPainter.draw(g, circuit, getWidth(), getHeight());
mouseAdapter.drawHover(g); mouseAdapter.drawHovers(g);
mouseAdapter.drawDrag(g); mouseAdapter.drawDrag(g);
} }

View File

@ -3,6 +3,7 @@ package de.ph87.electro.circuit;
import de.ph87.electro.circuit.node.Node; import de.ph87.electro.circuit.node.Node;
import de.ph87.electro.circuit.part.Part; import de.ph87.electro.circuit.part.Part;
import de.ph87.electro.circuit.wire.Wire; import de.ph87.electro.circuit.wire.Wire;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.awt.*; import java.awt.*;
@ -33,55 +34,65 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
@Override @Override
public void mouseClicked(final MouseEvent event) { public void mouseClicked(final MouseEvent event) {
hoverUpdate(event); findHovers(event);
if (mouseClickedAction(event)) {
terminateMouseAction();
}
}
private boolean mouseClickedAction(final MouseEvent event) {
if (wire != null) { if (wire != null) {
switch (event.getButton()) { switch (event.getButton()) {
case BUTTON3: case BUTTON3:
circuitPanel.getCircuit().disconnect(wire); circuitPanel.getCircuit().disconnect(wire);
circuitPanel.getCircuit().evaluate(); circuitPanel.getCircuit().evaluate();
wire = null; return true;
break;
} }
} }
if (part != null) { if (part != null) {
switch (event.getButton()) { switch (event.getButton()) {
case BUTTON1: case BUTTON1:
part.action(); part.action();
circuitPanel.getCircuit().evaluate(); circuitPanel.getCircuit().evaluate();
break; return true;
case BUTTON2: case BUTTON2:
part.rotate(); part.rotate();
break; return true;
case BUTTON3: case BUTTON3:
circuitPanel.getCircuit().removePart(part); circuitPanel.getCircuit().removePart(part);
circuitPanel.getCircuit().evaluate(); circuitPanel.getCircuit().evaluate();
part = null; part = null;
break; return true;
} }
} }
return false;
}
private void terminateMouseAction() {
part = null;
node = null;
wire = null;
dragging = null;
circuitPanel.repaint(); circuitPanel.repaint();
} }
@Override @Override
public void mouseMoved(final MouseEvent event) { public void mouseMoved(@NonNull final MouseEvent event) {
hoverUpdate(event); findHovers(event);
circuitPanel.repaint(); circuitPanel.repaint();
} }
@Override @Override
public void mouseDragged(final MouseEvent event) { public void mouseDragged(@NonNull final MouseEvent event) {
if (dragging == null) { if (dragging == null) {
hoverUpdate(event); findHovers(event);
} }
dragging = event.getPoint(); dragging = event.getPoint();
circuitPanel.repaint(); circuitPanel.repaint();
} }
@Override @Override
public void mouseReleased(final MouseEvent event) { public void mouseReleased(@NonNull final MouseEvent event) {
if (dragging == null) { if (dragging == null) {
return; return;
} }
@ -98,7 +109,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
if (node != null) { if (node != null) {
final Node source = node; final Node source = node;
hoverUpdate(event); findHovers(event);
if (node != null) { if (node != null) {
final Wire wire = circuitPanel.getCircuit().connect(source, node); final Wire wire = circuitPanel.getCircuit().connect(source, node);
log.info("Wire CREATED: {}", wire); log.info("Wire CREATED: {}", wire);
@ -108,26 +119,17 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
} }
} }
dragging = null; terminateMouseAction();
circuitPanel.repaint();
} }
private void hoverUpdate(final MouseEvent event) { private void findHovers(@NonNull final MouseEvent event) {
final Point position = event.getPoint(); final Point position = event.getPoint();
part = circuitPanel.getCircuit().findPartByPosition(position).orElse(null); part = circuitPanel.getCircuit().findPartByPosition(position).orElse(null);
node = part != null ? part.findNodeByPosition(position).orElse(null) : null; node = part != null ? part.findNodeByPosition(position).orElse(null) : null;
if (node != null) {
part = null;
wire = null;
return;
}
wire = circuitPanel.getCircuit().findWireByPosition(position).orElse(null); wire = circuitPanel.getCircuit().findWireByPosition(position).orElse(null);
if (wire != null) {
part = null;
}
} }
public void drawHover(final Graphics2D g) { public void drawHovers(@NonNull final Graphics2D g) {
if (part != null) { if (part != null) {
g.setColor(NODE_HOVER_BORDER_COLOR); g.setColor(NODE_HOVER_BORDER_COLOR);
g.setStroke(HOVER_STROKE); g.setStroke(HOVER_STROKE);
@ -157,7 +159,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
} }
} }
public void drawDrag(final Graphics2D g) { public void drawDrag(@NonNull final Graphics2D g) {
if (dragging != null) { if (dragging != null) {
if (part != null) { if (part != null) {
g.setColor(PART_HOVER_COLOR); g.setColor(PART_HOVER_COLOR);