X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodeladapter%2FViewLogicModelAdapter.java;h=3cbc1502273cfa3314bf8d3a514f2b453b446cc8;hb=c0588ff2976c5b4b30f03fb3b373f790efc6a857;hp=df3f9766a2c250d5e1eef8f39173eadd9b6f4280;hpb=054e77aca4d4de146205ea64edd60923db5e23d9;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index df3f9766..3cbc1502 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -11,6 +11,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import net.mograsim.logic.core.components.gates.AndGate; +import net.mograsim.logic.core.components.gates.NandGate; import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.core.components.gates.OrGate; import net.mograsim.logic.core.timeline.Timeline; @@ -19,6 +20,7 @@ import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.ui.model.ViewModel; import net.mograsim.logic.ui.model.components.GUIAndGate; import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.GUINandGate; import net.mograsim.logic.ui.model.components.GUINotGate; import net.mograsim.logic.ui.model.components.GUIOrGate; import net.mograsim.logic.ui.model.components.SubmodelComponent; @@ -26,11 +28,9 @@ import net.mograsim.logic.ui.model.components.SubmodelInterface; import net.mograsim.logic.ui.model.wires.GUIWire; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.model.wires.WireCrossPoint; -import net.mograsim.logic.ui.modeladapter.componentadapters.AtomicAm2901NANDBasedAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; -import net.mograsim.logic.ui.modeladapter.componentadapters.NandGateAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class ViewLogicModelAdapter @@ -42,10 +42,9 @@ public class ViewLogicModelAdapter componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); - componentAdaptersModifiable.add(new NandGateAdapter()); + componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new)); componentAdaptersModifiable.add(new ManualSwitchAdapter()); componentAdaptersModifiable.add(new BitDisplayAdapter()); - componentAdaptersModifiable.add(new AtomicAm2901NANDBasedAdapter()); // TODO list all adapters here componentAdapters = Collections.unmodifiableMap( componentAdaptersModifiable.stream().collect(Collectors.toMap(ComponentAdapter::getSupportedClass, Function.identity()))); @@ -71,9 +70,9 @@ public class ViewLogicModelAdapter if (guiComp instanceof SubmodelComponent) { SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp; - Map supermodelPinsPerSubmodelPin = guiCompCasted.getSupermodelPinsPerSubmodelPin(); - Map externalWiresForSubmodel = supermodelPinsPerSubmodelPin.entrySet().stream() - .collect(Collectors.toMap(Entry::getKey, e -> logicWiresPerPin.get(e.getValue()))); + Map supermodelPins = guiCompCasted.getSupermodelPins(); + Map externalWiresForSubmodel = supermodelPins.entrySet().stream() + .collect(Collectors.toMap(e -> guiCompCasted.getSubmodelPin(e.getKey()), e -> logicWiresPerPin.get(e.getValue()))); convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel); } else if (guiComp instanceof WireCrossPoint) { @@ -113,8 +112,11 @@ public class ViewLogicModelAdapter if (externalWireCandidate != null) if (externalWire == null) externalWire = externalWireCandidate; + else if (externalWire.length == externalWireCandidate.length) + Wire.fuse(externalWire, externalWireCandidate); else - throw new IllegalArgumentException("Two pins to external wires can't be connected directly"); + throw new IllegalArgumentException( + "Two pins to external wires with different logicWidths can't be connected directly"); } return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire; }));