import static org.junit.jupiter.api.Assertions.fail;\r
\r
import java.lang.reflect.Field;\r
+import java.util.ArrayList;\r
import java.util.HashMap;\r
import java.util.HashSet;\r
import java.util.LinkedList;\r
+import java.util.List;\r
import java.util.Objects;\r
import java.util.Queue;\r
import java.util.Set;\r
import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;\r
import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;\r
import net.mograsim.logic.ui.model.wires.GUIWire;\r
+import net.mograsim.logic.ui.model.wires.Pin;\r
import net.mograsim.logic.ui.modeladapter.LogicModelParameters;\r
import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;\r
\r
public class TestableAm2901Impl implements TestableAm2901\r
{\r
- private GUIAm2901 am2901;\r
+ private GUIComponent am2901;\r
private Timeline timeline;\r
private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;\r
private ManualSwitch C;\r
{\r
// Create view model\r
ViewModelModifiable viewModel = new ViewModelModifiable();\r
+ // TODO replace with deserialized version as soon as high level states work for deserialized components\r
am2901 = new GUIAm2901(viewModel);\r
+// am2901 = IndirectGUIComponentCreator.createComponent(viewModel, "GUIAm2901");\r
+ // guess which pins are outputs and which are inputs\r
+ // TODO this code exists three times... but it seems too "hacky" to put it in a helper class\r
+ List<String> inputPinNames = new ArrayList<>();\r
+ List<String> outputPinNames = new ArrayList<>();\r
+ for (Pin p : am2901.getPins().values())\r
+ if (p.getRelX() == 0)\r
+ inputPinNames.add(p.name);\r
+ else\r
+ outputPinNames.add(p.name);\r
// Get switches\r
HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();\r
- for (String id : am2901.getInputPinNames())\r
+ for (String id : inputPinNames)\r
{\r
GUIManualSwitch sw = new GUIManualSwitch(viewModel);\r
new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());\r
}\r
// Get displays\r
HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();\r
- for (String id : am2901.getOutputPinNames())\r
+ for (String id : outputPinNames)\r
{\r
GUIBitDisplay bd = new GUIBitDisplay(viewModel);\r
// bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));\r
{\r
ViewModel model = modelsToIterate.poll();\r
wiresIncludingSubmodels.addAll(model.getWires());\r
- for (GUIComponent comp : model.getComponents())\r
+ for (GUIComponent comp : model.getComponentsByName().values())\r
if (comp instanceof SubmodelComponent)\r
modelsToIterate.offer(((SubmodelComponent) comp).submodel);\r
}\r