diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java index 6898598..2946994 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java @@ -17,11 +17,17 @@ public class CircuitPanel extends JPanel { private Circuit circuit = new Circuit(); + private Part dragPart = null; + + private Point dragPoint = null; + + private Point dragOffset = null; + public CircuitPanel() { - addMouseListener(new MouseAdapter() { + final MouseAdapter listener = new MouseAdapter() { @Override - public void mouseReleased(final MouseEvent e) { + public void mouseClicked(final MouseEvent e) { final int x = e.getX() / RASTER; final int y = e.getY() / RASTER; final Optional partOptional = circuit.getParts().stream().filter(p -> p.getX() == x && p.getY() == y).findFirst(); @@ -42,7 +48,39 @@ public class CircuitPanel extends JPanel { } } - }); + @Override + public void mousePressed(final MouseEvent e) { + final int x = e.getX() / RASTER; + final int y = e.getY() / RASTER; + dragOffset = new Point(RASTER / 2, RASTER / 2); + dragPart = circuit.getParts().stream().filter(p -> p.getX() == x && p.getY() == y).findFirst().orElse(null); + } + + @Override + public void mouseDragged(final MouseEvent e) { + if (dragPart != null) { + dragPoint = e.getPoint(); + repaint(); + } + } + + @Override + public void mouseReleased(final MouseEvent e) { + if (dragPart != null) { + final int x = e.getX() / RASTER; + final int y = e.getY() / RASTER; + dragPart.setX(x); + dragPart.setY(y); + dragPart = null; + dragPoint = null; + dragOffset = null; + repaint(); + } + } + + }; + addMouseListener(listener); + addMouseMotionListener(listener); circuit = DemoAll.create(); } @@ -55,6 +93,10 @@ public class CircuitPanel extends JPanel { drawParts(g); drawRaster(g, w, h); drawWires(g); + if (dragPart != null && dragPoint != null) { + g.setColor(new Color(192, 192, 192, 128)); + g.fillRect(dragPoint.x - dragOffset.x, dragPoint.y - dragOffset.y, RASTER, RASTER); + } } private void drawBack(final Graphics2D g, final int w, final int h) {