Sidebar WIP
This commit is contained in:
parent
510a3ec977
commit
c61317f705
@ -1,14 +1,32 @@
|
|||||||
package de.ph87.electro;
|
package de.ph87.electro;
|
||||||
|
|
||||||
import de.ph87.electro.circuit.CircuitPanel;
|
import de.ph87.electro.circuit.CircuitPanel;
|
||||||
|
import de.ph87.electro.sidebar.Sidebar;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class Window extends JFrame {
|
public class Window extends JFrame {
|
||||||
|
|
||||||
|
private final CircuitPanel circuit = new CircuitPanel();
|
||||||
|
|
||||||
public Window() {
|
public Window() {
|
||||||
add(new CircuitPanel());
|
GridBagConstraints c;
|
||||||
|
setLayout(new GridBagLayout());
|
||||||
|
|
||||||
|
c = new GridBagConstraints();
|
||||||
|
c.gridx = 0;
|
||||||
|
c.weightx = 1;
|
||||||
|
c.weighty = 1;
|
||||||
|
c.fill = GridBagConstraints.BOTH;
|
||||||
|
add(new Sidebar(part -> circuit.getCircuit().add(part)), c);
|
||||||
|
|
||||||
|
c = new GridBagConstraints();
|
||||||
|
c.gridx = 1;
|
||||||
|
c.weightx = 4;
|
||||||
|
c.weighty = 1;
|
||||||
|
c.fill = GridBagConstraints.BOTH;
|
||||||
|
add(circuit, c);
|
||||||
|
|
||||||
positionOnRightMostScreen();
|
positionOnRightMostScreen();
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
|
|||||||
@ -38,7 +38,7 @@ public class Circuit {
|
|||||||
for (int i = 0; i < rotate % 4; i++) {
|
for (int i = 0; i < rotate % 4; i++) {
|
||||||
part.rotate();
|
part.rotate();
|
||||||
}
|
}
|
||||||
parts.add(part);
|
add(part);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PartLight addLight(final String name, final int x, final int y, final int rotate, final double maxVoltage) {
|
public PartLight addLight(final String name, final int x, final int y, final int rotate, final double maxVoltage) {
|
||||||
@ -70,6 +70,11 @@ public class Circuit {
|
|||||||
b.getDestinations().add(a);
|
b.getDestinations().add(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(final Part part) {
|
||||||
|
parts.add(part);
|
||||||
|
evaluate();
|
||||||
|
}
|
||||||
|
|
||||||
public void evaluate() {
|
public void evaluate() {
|
||||||
parts.forEach(Part::reset);
|
parts.forEach(Part::reset);
|
||||||
streamBatteries().forEach(PartBattery::startPropagation);
|
streamBatteries().forEach(PartBattery::startPropagation);
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package de.ph87.electro.circuit;
|
|||||||
|
|
||||||
import de.ph87.electro.circuit.part.Part;
|
import de.ph87.electro.circuit.part.Part;
|
||||||
import de.ph87.electro.demo.DemoAll;
|
import de.ph87.electro.demo.DemoAll;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@ -15,6 +16,7 @@ import static java.awt.event.MouseEvent.BUTTON3;
|
|||||||
|
|
||||||
public class CircuitPanel extends JPanel {
|
public class CircuitPanel extends JPanel {
|
||||||
|
|
||||||
|
@Getter
|
||||||
private Circuit circuit = new Circuit();
|
private Circuit circuit = new Circuit();
|
||||||
|
|
||||||
private Part dragPart = null;
|
private Part dragPart = null;
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public abstract class Part {
|
|||||||
private final String uuid;
|
private final String uuid;
|
||||||
|
|
||||||
@ToString.Include
|
@ToString.Include
|
||||||
private String name;
|
protected String name;
|
||||||
|
|
||||||
protected int x;
|
protected int x;
|
||||||
|
|
||||||
@ -142,4 +142,6 @@ public abstract class Part {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract Part duplicate(final int x, final int y);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,6 +89,11 @@ public class PartBattery extends Part {
|
|||||||
img(g, img, 0, 0);
|
img(g, img, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartBattery duplicate(final int x, final int y) {
|
||||||
|
return new PartBattery(name, x, y, voltage);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click() {
|
||||||
// nothing
|
// nothing
|
||||||
|
|||||||
@ -89,6 +89,11 @@ public class PartLight extends PartOther {
|
|||||||
line(g, diag, 1 - diag, 1 - diag, diag, Color.BLACK, SYMBOL_STROKE);
|
line(g, diag, 1 - diag, 1 - diag, diag, Color.BLACK, SYMBOL_STROKE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartLight duplicate(final int x, final int y) {
|
||||||
|
return new PartLight(name, x, y, maxVoltage);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click() {
|
public void click() {
|
||||||
defect = false;
|
defect = false;
|
||||||
|
|||||||
@ -68,4 +68,9 @@ public class PartSwitch1x1 extends PartOther {
|
|||||||
state = !state;
|
state = !state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartSwitch1x1 duplicate(final int x, final int y) {
|
||||||
|
return new PartSwitch1x1(name, x, y, state);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,4 +80,9 @@ public class PartSwitch1x2 extends PartOther {
|
|||||||
state = !state;
|
state = !state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartSwitch1x2 duplicate(final int x, final int y) {
|
||||||
|
return new PartSwitch1x2(name, x, y, state);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,4 +98,9 @@ public class PartSwitchCross extends PartOther {
|
|||||||
state = !state;
|
state = !state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartSwitchCross duplicate(final int x, final int y) {
|
||||||
|
return new PartSwitchCross(name, x, y, state);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
43
src/main/java/de/ph87/electro/sidebar/Sidebar.java
Normal file
43
src/main/java/de/ph87/electro/sidebar/Sidebar.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package de.ph87.electro.sidebar;
|
||||||
|
|
||||||
|
import de.ph87.electro.circuit.part.Part;
|
||||||
|
import de.ph87.electro.circuit.part.impl.*;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class Sidebar extends JPanel {
|
||||||
|
|
||||||
|
private final Consumer<Part> onAdd;
|
||||||
|
|
||||||
|
private final List<SidebarPart> parts = new ArrayList<>();
|
||||||
|
|
||||||
|
public Sidebar(final Consumer<Part> onAdd) {
|
||||||
|
this.onAdd = onAdd;
|
||||||
|
setLayout(new GridBagLayout());
|
||||||
|
add(new PartBattery("Batterie", 0, 0, 3.0));
|
||||||
|
add(new PartLight("Licht", 1, 0, 3.0));
|
||||||
|
add(new PartSwitch1x1("Ausschalter", 0, 1, false));
|
||||||
|
add(new PartSwitch1x2("Wechselschalter", 1, 1, false));
|
||||||
|
add(new PartSwitchCross("Kreuzschalter", 0, 2, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void add(final Part part) {
|
||||||
|
final SidebarPart entry = new SidebarPart(part, onAdd);
|
||||||
|
parts.add(entry);
|
||||||
|
add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paint(final Graphics g) {
|
||||||
|
g.setColor(Color.gray);
|
||||||
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
for (final SidebarPart part : parts) {
|
||||||
|
part.getPart().paint((Graphics2D) g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
35
src/main/java/de/ph87/electro/sidebar/SidebarPart.java
Normal file
35
src/main/java/de/ph87/electro/sidebar/SidebarPart.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package de.ph87.electro.sidebar;
|
||||||
|
|
||||||
|
import de.ph87.electro.circuit.part.Part;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import static de.ph87.electro.CONFIG.RASTER;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class SidebarPart extends JPanel {
|
||||||
|
|
||||||
|
private final Part part;
|
||||||
|
|
||||||
|
private final Consumer<Part> add;
|
||||||
|
|
||||||
|
public SidebarPart(final Part part, final Consumer<Part> add) {
|
||||||
|
this.part = part;
|
||||||
|
this.add = add;
|
||||||
|
setPreferredSize(new Dimension(RASTER, RASTER));
|
||||||
|
addMouseListener(new MouseAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(final MouseEvent e) {
|
||||||
|
add.accept(part.duplicate(e.getPoint().x / RASTER, e.getPoint().y / RASTER));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user