From db2d83580c4a6a83c0ca8388b5e7f92571aa5a18 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Sat, 22 Jun 2019 14:40:25 +0200 Subject: [PATCH] ViewLogicModelAdapter no longer forces all GUIComponents to be loaded --- .../logic/ui/model/components/GUIAndGate.java | 8 ++++++ .../ui/model/components/GUIBitDisplay.java | 7 +++++ .../ui/model/components/GUIManualSwitch.java | 7 +++++ .../ui/model/components/GUINandGate.java | 8 ++++++ .../logic/ui/model/components/GUINotGate.java | 8 ++++++ .../logic/ui/model/components/GUIOrGate.java | 8 ++++++ .../modeladapter/ViewLogicModelAdapter.java | 27 +++---------------- 7 files changed, 50 insertions(+), 23 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java index 716d210c..adba60fb 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java @@ -1,6 +1,9 @@ package net.mograsim.logic.ui.model.components; +import net.mograsim.logic.core.components.gates.AndGate; import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class GUIAndGate extends SimpleRectangularGUIGate { @@ -9,4 +12,9 @@ public class GUIAndGate extends SimpleRectangularGUIGate super(model, logicWidth, "&", false); setInputCount(2);// TODO make variable } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new)); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java index 88ee120c..430ab39d 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java @@ -10,6 +10,8 @@ import net.mograsim.logic.core.components.BitDisplay; import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter; public class GUIBitDisplay extends GUIComponent { @@ -68,4 +70,9 @@ public class GUIBitDisplay extends GUIComponent { return inputPin; } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter()); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java index 7044dd56..bb68d264 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java @@ -11,6 +11,8 @@ import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; public class GUIManualSwitch extends GUIComponent { @@ -81,4 +83,9 @@ public class GUIManualSwitch extends GUIComponent { return outputPin; } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter()); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java index 8078ddbf..6a3e6948 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java @@ -1,6 +1,9 @@ package net.mograsim.logic.ui.model.components; +import net.mograsim.logic.core.components.gates.NandGate; import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class GUINandGate extends SimpleRectangularGUIGate { @@ -9,4 +12,9 @@ public class GUINandGate extends SimpleRectangularGUIGate super(model, logicWidth, "&", true); setInputCount(2);// TODO make variable } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new)); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java index 76d24508..f439f89a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java @@ -1,6 +1,9 @@ package net.mograsim.logic.ui.model.components; +import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class GUINotGate extends SimpleRectangularGUIGate { @@ -9,4 +12,9 @@ public class GUINotGate extends SimpleRectangularGUIGate super(model, logicWidth, "1", true); setInputCount(1); } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java index d4fdb7fe..8a983a21 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java @@ -1,6 +1,9 @@ package net.mograsim.logic.ui.model.components; +import net.mograsim.logic.core.components.gates.OrGate; import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class GUIOrGate extends SimpleRectangularGUIGate { @@ -9,4 +12,9 @@ public class GUIOrGate extends SimpleRectangularGUIGate super(model, logicWidth, "\u22651", false);// ">=1" setInputCount(2); } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new)); + } } \ No newline at end of file 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 5503dc4e..cedb1279 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 @@ -10,44 +10,25 @@ import java.util.Set; 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; import net.mograsim.logic.core.wires.Wire; 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; 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.BitDisplayAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter; -import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; -import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class ViewLogicModelAdapter { - private final static Map, ComponentAdapter> componentAdapters; - static + private final static Map, ComponentAdapter> componentAdapters = new HashMap<>(); + + public static void addComponentAdapter(ComponentAdapter componentAdapter) { - Set> componentAdaptersModifiable = new HashSet<>(); - 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 SimpleGateAdapter<>(GUINandGate.class, NandGate::new)); - componentAdaptersModifiable.add(new ManualSwitchAdapter()); - componentAdaptersModifiable.add(new BitDisplayAdapter()); - // TODO list all adapters here - componentAdapters = Collections.unmodifiableMap( - componentAdaptersModifiable.stream().collect(Collectors.toMap(ComponentAdapter::getSupportedClass, Function.identity()))); + componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter); } public static Timeline convert(ViewModel viewModel, LogicModelParameters params) -- 2.17.1