diff --git a/src/main/java/de/neemann/digital/gui/draw/library/CustomElement.java b/src/main/java/de/neemann/digital/gui/draw/library/CustomElement.java index 283da829f..a9701c8db 100644 --- a/src/main/java/de/neemann/digital/gui/draw/library/CustomElement.java +++ b/src/main/java/de/neemann/digital/gui/draw/library/CustomElement.java @@ -7,22 +7,25 @@ import de.neemann.digital.core.element.Element; import de.neemann.digital.gui.draw.elements.Circuit; import de.neemann.digital.gui.draw.elements.PinException; import de.neemann.digital.gui.draw.model.ModelDescription; +import de.neemann.digital.gui.draw.model.NetList; /** * @author hneemann */ public class CustomElement implements Element { - private Circuit circuit; - private ElementLibrary library; + private final NetList netList; + private final Circuit circuit; + private final ElementLibrary library; public CustomElement(Circuit circuit, ElementLibrary library) { this.circuit = circuit; this.library = library; + netList = new NetList(circuit.getWires()); } public ModelDescription getModelDescription() throws PinException, NodeException { - return new ModelDescription(circuit, library, true); + return new ModelDescription(circuit, library, true, new NetList(netList)); } @Override diff --git a/src/main/java/de/neemann/digital/gui/draw/model/ModelDescription.java b/src/main/java/de/neemann/digital/gui/draw/model/ModelDescription.java index 8476bf448..fc1ccb5d2 100644 --- a/src/main/java/de/neemann/digital/gui/draw/model/ModelDescription.java +++ b/src/main/java/de/neemann/digital/gui/draw/model/ModelDescription.java @@ -37,10 +37,13 @@ public class ModelDescription implements Iterable { public ModelDescription(Circuit circuit, ElementLibrary library) throws PinException, NodeException { this(circuit, library, false); } - public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom) throws PinException, NodeException { + this(circuit, library, readAsCustom, new NetList(circuit.getWires())); + } + + public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom, NetList netList) throws PinException, NodeException { + this.netList = netList; entries = new ArrayList<>(); - netList = new NetList(circuit.getWires()); if (readAsCustom) ioMap = new HashMap<>(); else @@ -73,7 +76,6 @@ public class ModelDescription implements Iterable { for (Pin p : pins) netList.add(p); - } diff --git a/src/main/java/de/neemann/digital/gui/draw/model/Net.java b/src/main/java/de/neemann/digital/gui/draw/model/Net.java index 4d2b2530f..248c1469c 100644 --- a/src/main/java/de/neemann/digital/gui/draw/model/Net.java +++ b/src/main/java/de/neemann/digital/gui/draw/model/Net.java @@ -24,6 +24,12 @@ public class Net { private final ArrayList pins; private final ArrayList wires; + public Net(Net toCopy) { + points = toCopy.points; // no deep copy of points necessary + wires = null; // wires not needed + pins = new ArrayList<>(toCopy.pins); // Pins are changed so create a deep copy + } + public Net(Wire w) { points = new HashSet<>(); points.add(w.p1); @@ -87,14 +93,15 @@ public class Net { for (Pin i : inputs) i.setValue(value); - if (bindWiresToValues) + if (bindWiresToValues && wires != null) for (Wire w : wires) w.setValue(value); } public void setHighLight(boolean highLight) { - for (Wire w : wires) - w.setHighLight(highLight); + if (wires != null) + for (Wire w : wires) + w.setHighLight(highLight); } public boolean containsValue(ObservableValue v) { diff --git a/src/main/java/de/neemann/digital/gui/draw/model/NetList.java b/src/main/java/de/neemann/digital/gui/draw/model/NetList.java index 8d711df4f..74957bc25 100644 --- a/src/main/java/de/neemann/digital/gui/draw/model/NetList.java +++ b/src/main/java/de/neemann/digital/gui/draw/model/NetList.java @@ -21,6 +21,13 @@ public class NetList implements Iterable { add(w); } + public NetList(NetList toCopy) { + netList = new ArrayList<>(); + for (Net net : toCopy) + netList.add(new Net(net)); + } + + public void add(NetList netList) { this.netList.addAll(netList.netList); }