Sidebar WIP
This commit is contained in:
parent
510a3ec977
commit
c61317f705
@ -1,14 +1,32 @@
|
||||
package de.ph87.electro;
|
||||
|
||||
import de.ph87.electro.circuit.CircuitPanel;
|
||||
import de.ph87.electro.sidebar.Sidebar;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class Window extends JFrame {
|
||||
|
||||
private final CircuitPanel circuit = new CircuitPanel();
|
||||
|
||||
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();
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
|
||||
@ -38,7 +38,7 @@ public class Circuit {
|
||||
for (int i = 0; i < rotate % 4; i++) {
|
||||
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) {
|
||||
@ -70,6 +70,11 @@ public class Circuit {
|
||||
b.getDestinations().add(a);
|
||||
}
|
||||
|
||||
public void add(final Part part) {
|
||||
parts.add(part);
|
||||
evaluate();
|
||||
}
|
||||
|
||||
public void evaluate() {
|
||||
parts.forEach(Part::reset);
|
||||
streamBatteries().forEach(PartBattery::startPropagation);
|
||||
|
||||
@ -2,6 +2,7 @@ package de.ph87.electro.circuit;
|
||||
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.demo.DemoAll;
|
||||
import lombok.Getter;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@ -15,6 +16,7 @@ import static java.awt.event.MouseEvent.BUTTON3;
|
||||
|
||||
public class CircuitPanel extends JPanel {
|
||||
|
||||
@Getter
|
||||
private Circuit circuit = new Circuit();
|
||||
|
||||
private Part dragPart = null;
|
||||
|
||||
@ -26,7 +26,7 @@ public abstract class Part {
|
||||
private final String uuid;
|
||||
|
||||
@ToString.Include
|
||||
private String name;
|
||||
protected String name;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PartBattery duplicate(final int x, final int y) {
|
||||
return new PartBattery(name, x, y, voltage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void click() {
|
||||
// nothing
|
||||
|
||||
@ -89,6 +89,11 @@ public class PartLight extends PartOther {
|
||||
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
|
||||
public void click() {
|
||||
defect = false;
|
||||
|
||||
@ -68,4 +68,9 @@ public class PartSwitch1x1 extends PartOther {
|
||||
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;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@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