diff --git a/src/main/java/de/ph87/electro/Window.java b/src/main/java/de/ph87/electro/Window.java index 756d4f5..c45045f 100644 --- a/src/main/java/de/ph87/electro/Window.java +++ b/src/main/java/de/ph87/electro/Window.java @@ -36,11 +36,6 @@ public class Window extends JFrame { setVisible(true); } - public static void main(String[] args) { - final Window window = new Window(); - window.setCircuit(Demos.potiAndVoltmeter()); - } - public void setCircuit(final Circuit circuit) { circuitPanel.setCircuit(circuit); } @@ -56,4 +51,9 @@ public class Window extends JFrame { setLocation(screenBounds.x, screenBounds.y); } + public static void main(String[] args) { + final Window window = new Window(); + window.setCircuit(Demos.potiAndVoltmeter()); + } + } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java index 18884f7..9380eae 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java @@ -32,49 +32,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter { circuitPanel.addMouseMotionListener(this); } - @Override - public void mouseClicked(final MouseEvent event) { - findHovers(event); - if (mouseClickedAction(event)) { - terminateMouseAction(); - } - } - - private boolean mouseClickedAction(final MouseEvent event) { - if (wire != null) { - switch (event.getButton()) { - case BUTTON3: - circuitPanel.getCircuit().disconnect(wire); - circuitPanel.getCircuit().evaluate(); - return true; - } - } - if (part != null) { - switch (event.getButton()) { - case BUTTON1: - part.action(); - circuitPanel.getCircuit().evaluate(); - return true; - case BUTTON2: - part.rotate(); - return true; - case BUTTON3: - circuitPanel.getCircuit().removePart(part); - circuitPanel.getCircuit().evaluate(); - part = null; - return true; - } - } - return false; - } - - private void terminateMouseAction() { - part = null; - node = null; - wire = null; - dragging = null; - circuitPanel.repaint(); - } + /* HOVER ---------------------------------------------------------------------------------------- */ @Override public void mouseMoved(@NonNull final MouseEvent event) { @@ -82,6 +40,71 @@ class CircuitPanelMouseAdapter extends MouseAdapter { circuitPanel.repaint(); } + private void findHovers(@NonNull final MouseEvent event) { + final Point position = event.getPoint(); + part = circuitPanel.getCircuit().findPartByPosition(position).orElse(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); + if (wire != null) { + part = null; + } + } + + public void drawHovers(@NonNull final Graphics2D g) { + drawPartHover(g); + drawNodeHover(g); + drawWireHover(g); + } + + private void drawPartHover(final Graphics2D g) { + if (part == null) { + return; + } + + g.setColor(NODE_HOVER_BORDER_COLOR); + g.setStroke(HOVER_STROKE); + g.drawRect(part.getPosition().x, part.getPosition().y, RASTER, RASTER); + } + + private void drawNodeHover(final Graphics2D g) { + if (node == null) { + return; + } + + final Point absolute = node.getPosition(); + + g.setColor(node.getColor()); + g.fillArc(absolute.x - NODE_RADIUS_HOVER, absolute.y - NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 0, 360); + + g.setColor(NODE_HOVER_BORDER_COLOR); + g.setStroke(HOVER_STROKE); + g.drawArc(absolute.x - NODE_RADIUS_HOVER, absolute.y - NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 0, 360); + } + + private void drawWireHover(final Graphics2D g) { + if (wire == null) { + return; + } + + final Point aa = wire.getA().getPosition(); + final Point bb = wire.getB().getPosition(); + + g.setColor(WIRE_HOVER_COLOR_BACK); + g.setStroke(WIRE_HOVER_STROKE_BACK); + g.drawLine(aa.x, aa.y, bb.x, bb.y); + + g.setColor(wire.getA().getColor()); + g.setStroke(WIRE_HOVER_STROKE); + g.drawLine(aa.x, aa.y, bb.x, bb.y); + } + + /* DRAG ----------------------------------------------------------------------------------------- */ + @Override public void mouseDragged(@NonNull final MouseEvent event) { if (dragging == null) { @@ -122,56 +145,75 @@ class CircuitPanelMouseAdapter extends MouseAdapter { terminateMouseAction(); } - private void findHovers(@NonNull final MouseEvent event) { - final Point position = event.getPoint(); - part = circuitPanel.getCircuit().findPartByPosition(position).orElse(null); - node = part != null ? part.findNodeByPosition(position).orElse(null) : null; - wire = circuitPanel.getCircuit().findWireByPosition(position).orElse(null); - } - - public void drawHovers(@NonNull final Graphics2D g) { - if (part != null) { - g.setColor(NODE_HOVER_BORDER_COLOR); - g.setStroke(HOVER_STROKE); - g.drawRect(part.getPosition().x, part.getPosition().y, RASTER, RASTER); - } - if (node != null) { - final Point absolute = node.getPosition(); - - g.setColor(node.getColor()); - g.fillArc(absolute.x - NODE_RADIUS_HOVER, absolute.y - NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 0, 360); - - g.setColor(NODE_HOVER_BORDER_COLOR); - g.setStroke(HOVER_STROKE); - g.drawArc(absolute.x - NODE_RADIUS_HOVER, absolute.y - NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 2 * NODE_RADIUS_HOVER, 0, 360); - } - if (wire != null) { - final Point aa = wire.getA().getPosition(); - final Point bb = wire.getB().getPosition(); - - g.setColor(WIRE_HOVER_COLOR_BACK); - g.setStroke(WIRE_HOVER_STROKE_BACK); - g.drawLine(aa.x, aa.y, bb.x, bb.y); - - g.setColor(wire.getA().getColor()); - g.setStroke(WIRE_HOVER_STROKE); - g.drawLine(aa.x, aa.y, bb.x, bb.y); - } - } - public void drawDrag(@NonNull final Graphics2D g) { - if (dragging != null) { - if (part != null) { - g.setColor(PART_HOVER_COLOR); - g.fillRect(dragging.x - P50, dragging.y - P50, RASTER, RASTER); - } - if (node != null) { - g.setColor(node.getColor()); - g.setStroke(WIRE_STROKE); - final Point absolute = node.getPosition(); - g.drawLine(absolute.x, absolute.y, dragging.x, dragging.y); + drawPartDrag(g); + drawNodeDrag(g); + } + + private void drawNodeDrag(final Graphics2D g) { + if (dragging == null || node == null) { + return; + } + g.setColor(node.getColor()); + g.setStroke(WIRE_STROKE); + final Point absolute = node.getPosition(); + g.drawLine(absolute.x, absolute.y, dragging.x, dragging.y); + } + + private void drawPartDrag(final Graphics2D g) { + if (dragging == null || part == null) { + return; + } + g.setColor(PART_HOVER_COLOR); + g.fillRect(dragging.x - P50, dragging.y - P50, RASTER, RASTER); + } + + /* CLICK ---------------------------------------------------------------------------------------- */ + + @Override + public void mouseClicked(final MouseEvent event) { + findHovers(event); + if (mouseClickedAction(event)) { + terminateMouseAction(); + } + } + + private boolean mouseClickedAction(final MouseEvent event) { + if (wire != null) { + switch (event.getButton()) { + case BUTTON3: + circuitPanel.getCircuit().disconnect(wire); + circuitPanel.getCircuit().evaluate(); + return true; } } + if (part != null) { + switch (event.getButton()) { + case BUTTON1: + part.action(); + circuitPanel.getCircuit().evaluate(); + return true; + case BUTTON2: + part.rotate(); + return true; + case BUTTON3: + circuitPanel.getCircuit().removePart(part); + circuitPanel.getCircuit().evaluate(); + part = null; + return true; + } + } + return false; + } + + /* COMMON --------------------------------------------------------------------------------------- */ + + private void terminateMouseAction() { + part = null; + node = null; + wire = null; + dragging = null; + circuitPanel.repaint(); } }