import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modeldff12 extends SimpleRectangularHardcodedModelComponent
{
- public Modeldff12(ViewModelModifiable model, String name)
+ public Modeldff12(LogicModelModifiable model, String name)
{
super(model, "dff12", name, "D flip flop\n12 bits");
setSize(40, 20);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modeldff4_finewe extends SimpleRectangularHardcodedModelComponent
{
- public Modeldff4_finewe(ViewModelModifiable model, String name)
+ public Modeldff4_finewe(LogicModelModifiable model, String name)
{
super(model, "dff4_finewe", name, "D flip flop\n4 bits");
setSize(35, 90);
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modelinc12 extends SimpleRectangularHardcodedModelComponent
{
- public Modelinc12(ViewModelModifiable model, String name)
+ public Modelinc12(LogicModelModifiable model, String name)
{
super(model, "inc12", name, "Incrementer");
setSize(40, 20);
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modelnor12 extends SimpleRectangularHardcodedModelComponent
{
- public Modelnor12(ViewModelModifiable model, String name)
+ public Modelnor12(LogicModelModifiable model, String name)
{
super(model, "nor12", name, "=0");
setSize(35, 20);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modelram5_12 extends SimpleRectangularHardcodedModelComponent
{
- public Modelram5_12(ViewModelModifiable model, String name)
+ public Modelram5_12(LogicModelModifiable model, String name)
{
super(model, "ram5_12", name, "RAM\n5 x 12 Bit");
setSize(40, 40);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class Modelsel4_12 extends SimpleRectangularHardcodedModelComponent
{
- public Modelsel4_12(ViewModelModifiable model, String name)
+ public Modelsel4_12(LogicModelModifiable model, String name)
{
super(model, "sel4_12", name, "4-way SEL\n12 bit");
setSize(80, 40);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class ModelAm2904RegCTInstrDecode extends SimpleRectangularHardcodedModelComponent
{
- public ModelAm2904RegCTInstrDecode(ViewModelModifiable model, String name)
+ public ModelAm2904RegCTInstrDecode(LogicModelModifiable model, String name)
{
super(model, "Am2904RegCTInstrDecode", name, "Instruction\ndecode");
setSize(80, 80);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class ModelAm2904ShiftInstrDecode extends SimpleRectangularHardcodedModelComponent
{
- public ModelAm2904ShiftInstrDecode(ViewModelModifiable model, String name)
+ public ModelAm2904ShiftInstrDecode(LogicModelModifiable model, String name)
{
super(model, "Am2904ShiftInstrDecode", name, "Shift \ninstruction\ndecode");
setSize(60, 80);
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class ModelAm2910InstrPLA extends SimpleRectangularHardcodedModelComponent
{
- public ModelAm2910InstrPLA(ViewModelModifiable model, String name)
+ public ModelAm2910InstrPLA(LogicModelModifiable model, String name)
{
super(model, "Am2910InstrPLA", name, "Instr.\nPLA");
setSize(30, 85);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class ModelAm2910RegCntr extends SimpleRectangularHardcodedModelComponent
{
- public ModelAm2910RegCntr(ViewModelModifiable model, String name)
+ public ModelAm2910RegCntr(LogicModelModifiable model, String name)
{
super(model, "Am2910RegCntr", name, "Register/\nCounter");
setSize(40, 40);
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.SimpleRectangularHardcodedModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public class ModelAm2910SP extends SimpleRectangularHardcodedModelComponent
{
- public ModelAm2910SP(ViewModelModifiable model, String name)
+ public ModelAm2910SP(LogicModelModifiable model, String name)
{
super(model, "Am2910SP", name, "Stack\npointer");
setSize(40, 30);
import net.mograsim.logic.core.components.CoreClock;
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.model.model.ViewModel;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModel;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.CoreModelParameters;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
public class Am2900Machine implements Machine
{
private Am2900MachineDefinition machineDefinition;
- private ViewModelModifiable viewModel;
+ private LogicModelModifiable logicModel;
private Timeline timeline;
private CoreClock clock;
public Am2900Machine(Am2900MachineDefinition am2900MachineDefinition)
{
this.machineDefinition = am2900MachineDefinition;
- viewModel = new ViewModelModifiable();
- IndirectModelComponentCreator.createComponent(viewModel,
+ logicModel = new LogicModelModifiable();
+ IndirectModelComponentCreator.createComponent(logicModel,
"resloader:Am2900Loader:jsonres:net/mograsim/logic/model/am2900/components/ModelAm2900.json");
CoreModelParameters params = new CoreModelParameters();
params.gateProcessTime = 50;
params.wireTravelTime = 10;
- timeline = LogicCoreAdapter.convert(viewModel, params);
+ timeline = LogicCoreAdapter.convert(logicModel, params);
}
@Override
}
@Override
- public ViewModel getModel()
+ public LogicModel getModel()
{
- return viewModel;
+ return logicModel;
}
@Override
import net.mograsim.logic.model.SimpleLogicUIStandalone;
import net.mograsim.logic.model.am2900.Am2900Loader;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
}
@SuppressWarnings("unused") // for ModelWires being created
- public static void createTestbench(ViewModelModifiable model)
+ public static void createTestbench(LogicModelModifiable model)
{
Am2900Loader.setup();
ModelComponent comp = IndirectModelComponentCreator.createComponent(model,
import java.util.stream.Stream;
import net.mograsim.logic.model.am2900.Am2900Loader;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.wires.ModelWire;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
try
{
DeserializedSubmodelComponent comp = (DeserializedSubmodelComponent) IndirectModelComponentCreator
- .createComponent(new ViewModelModifiable(), "jsonfile:" + json.toString());
+ .createComponent(new LogicModelModifiable(), "jsonfile:" + json.toString());
System.out.println("Reserializing " + json);
comp.getSupermodelPins().entrySet().stream().sorted(Comparator.comparing(Entry::getKey)).map(Entry::getValue).forEach(pin ->
{
comp.removeSubmodelInterface(interfacePin.name);
comp.addSubmodelInterface(
new MovablePin(comp, interfacePin.name, interfacePin.logicWidth, usage, interfacePin.getRelX(), interfacePin.getRelY()));
- ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
+ LogicModelModifiable submodelModifiable = comp.getSubmodelModifiable();
wiresConnectedToPin.forEach(w -> new ModelWire(submodelModifiable, w.getPin1(), w.getPin2()));
}
}
\ No newline at end of file
import net.mograsim.logic.model.SimpleLogicUIStandalone;
import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
import net.mograsim.logic.model.am2900.Am2900Loader;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.atomic.ModelAndGate;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench, Am2901Testbench::beforeRun);
}
- public static void createTestbench(ViewModelModifiable model)
+ public static void createTestbench(LogicModelModifiable model)
{
ModelComponent comp = IndirectModelComponentCreator.createComponent(model, "Am2901");
ModellingTool tool = ModellingTool.createFor(model);
import net.mograsim.logic.model.SimpleLogicUIStandalone;
import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
import net.mograsim.logic.model.am2900.Am2900Loader;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
SimpleLogicUIStandalone.executeVisualisation(Am2904Testbench::create, Am2904Testbench::beforeRun);
}
- public static void create(ViewModelModifiable model)
+ public static void create(LogicModelModifiable model)
{
- // TODO replace with proper ViewModel deserialization
+ // TODO replace with proper LogicModel deserialization
DeserializedSubmodelComponent testbench = (DeserializedSubmodelComponent) IndirectModelComponentCreator.createComponent(model,
"jsonfile:Am2904Testbench.json", "testbench");
testbench.setSize(1000, 1000);
import net.mograsim.logic.model.SimpleLogicUIStandalone;
import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
import net.mograsim.logic.model.am2900.Am2900Loader;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.Orientation;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
}
@SuppressWarnings("unused") // for ModelWires being created
- public static void create(ViewModelModifiable model)
+ public static void create(LogicModelModifiable model)
{
ModelComponent am2910 = IndirectModelComponentCreator.createComponent(model, "Am2910", "Am2910");
ModelClock C = new ModelClock(model, new ModelClockParams(1000, Orientation.RIGHT));
import net.mograsim.logic.core.components.CoreBitDisplay;
import net.mograsim.logic.core.components.CoreManualSwitch;
import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
import net.mograsim.logic.model.model.wires.Pin;
private final ModelBitDisplay modelBitDisplay;
private final ModelManualSwitch modelManualSwitch;
- public SwitchWithDisplay(ViewModelModifiable model, Pin target)
+ public SwitchWithDisplay(LogicModelModifiable model, Pin target)
{
pin = target;
modelBitDisplay = new ModelBitDisplay(model, pin.logicWidth);
import net.mograsim.logic.model.am2900.Am2900Loader;
import net.mograsim.logic.model.am2900.TestableCircuit;
import net.mograsim.logic.model.am2900.TestableCircuit.Result;
-import net.mograsim.logic.model.model.ViewModel;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModel;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
private ModelComponent component;
private Timeline timeline;
- private ViewModelModifiable viewModel;
+ private LogicModelModifiable logicModel;
private ModellingTool modellingTool;
private HashMap<String, ModelManualSwitch> idSwitchMap = new HashMap<>();
private HashMap<String, ModelBitDisplay> idDisplayMap = new HashMap<>();
public void setup(DebugState debug)
{
this.debug = debug;
- // Create view model
- viewModel = new ViewModelModifiable();
- modellingTool = ModellingTool.createFor(viewModel);
+ // Create logic model
+ logicModel = new LogicModelModifiable();
+ modellingTool = ModellingTool.createFor(logicModel);
Am2900Loader.setup();
- component = IndirectModelComponentCreator.createComponent(viewModel, modelId);
+ component = IndirectModelComponentCreator.createComponent(logicModel, modelId);
setField(componentField, component);
component.getPins().values().forEach(this::extendModelPin);
CoreModelParameters params = new CoreModelParameters();
params.gateProcessTime = 50;
params.wireTravelTime = 10;
- timeline = LogicCoreAdapter.convert(viewModel, params);
+ timeline = LogicCoreAdapter.convert(logicModel, params);
timelineField.ifPresent(f -> setField(f, timeline));
// Bind switches/displays to this test class
Class<?> type = f.getType();
if (CoreManualSwitch.class.isAssignableFrom(type))
{
- ModelManualSwitch gms = new ModelManualSwitch(viewModel, p.logicWidth);
+ ModelManualSwitch gms = new ModelManualSwitch(logicModel, p.logicWidth);
modellingTool.connect(p, gms.getOutputPin());
idSwitchMap.put(p.name, gms);
} else if (CoreBitDisplay.class.isAssignableFrom(type))
{
- ModelBitDisplay gbd = new ModelBitDisplay(viewModel, p.logicWidth);
+ ModelBitDisplay gbd = new ModelBitDisplay(logicModel, p.logicWidth);
modellingTool.connect(p, gbd.getInputPin());
idDisplayMap.put(p.name, gbd);
} else if (SwitchWithDisplay.class.isAssignableFrom(type))
{
- SwitchWithDisplay swd = new SwitchWithDisplay(viewModel, p);
+ SwitchWithDisplay swd = new SwitchWithDisplay(logicModel, p);
setField(f, swd);
} else
{
{
// Debug code
HashSet<ModelWire> wiresIncludingSubmodels = new HashSet<>();
- Queue<ViewModel> modelsToIterate = new LinkedList<>();
- modelsToIterate.add(viewModel);
+ Queue<LogicModel> modelsToIterate = new LinkedList<>();
+ modelsToIterate.add(logicModel);
while (modelsToIterate.size() > 0)
{
- ViewModel model = modelsToIterate.poll();
+ LogicModel model = modelsToIterate.poll();
wiresIncludingSubmodels.addAll(model.getWiresByName().values());
for (ModelComponent comp : model.getComponentsByName().values())
if (comp instanceof SubmodelComponent)
modelsToIterate.offer(((SubmodelComponent) comp).submodel);
}
System.out.println(wiresIncludingSubmodels.size());
- viewModel.setRedrawHandler(() -> wiresIncludingSubmodels.forEach(w ->
+ logicModel.setRedrawHandler(() -> wiresIncludingSubmodels.forEach(w ->
{
if (debugWires)
{
{
try
{
- new LogicUIStandaloneGUI(viewModel).run();
- viewModel.setRedrawHandler(null);
+ new LogicUIStandaloneGUI(logicModel).run();
+ logicModel.setRedrawHandler(null);
}
catch (Exception e)
{
import net.mograsim.logic.model.editor.states.StateManager;
import net.mograsim.logic.model.editor.ui.DialogManager;
import net.mograsim.logic.model.editor.ui.EditorGUI;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.ModelWire;
import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
gui.open();
}
- public ViewModelModifiable getSubmodel()
+ public LogicModelModifiable getSubmodel()
{
return toBeEdited.getSubmodelModifiable();
}
public static void openNewEditor()
{
- DeserializedSubmodelComponent toBeEdited = new DeserializedSubmodelComponent(new ViewModelModifiable(), null, null, null);
+ DeserializedSubmodelComponent toBeEdited = new DeserializedSubmodelComponent(new LogicModelModifiable(), null, null, null);
toBeEdited.setOutlineRenderer(new DefaultOutlineRenderer(toBeEdited));
toBeEdited.setSymbolRenderer(new DefaultSymbolRenderer(toBeEdited));
toBeEdited.setHighLevelStateHandler(new DefaultHighLevelStateHandler());
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
import net.mograsim.logic.model.serializing.SubmodelComponentSerializer;
fdShell.dispose();
if (result != null)
{
- new Editor((DeserializedSubmodelComponent) IndirectModelComponentCreator.createComponent(new ViewModelModifiable(),
+ new Editor((DeserializedSubmodelComponent) IndirectModelComponentCreator.createComponent(new LogicModelModifiable(),
"jsonfile:" + result));
}
}
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.model.editor.Editor;
import net.mograsim.logic.model.editor.Editor.ComponentInfo;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.serializing.IdentifyParams;
public class ComponentHandle extends Handle
{
- private final ViewModelModifiable model;
+ private final LogicModelModifiable model;
public final ModelComponent parent;
private final static double POS_OFFSET = 2.0d;
private final static double LENGTH_OFFSET = POS_OFFSET * 2;
boolean selected = false;
- public ComponentHandle(ViewModelModifiable model, ModelComponent parent)
+ public ComponentHandle(LogicModelModifiable model, ModelComponent parent)
{
super(4);
this.model = model;
import net.mograsim.logic.model.editor.Editor;
import net.mograsim.logic.model.editor.states.EditorState;
import net.mograsim.logic.model.editor.util.PrioritySet;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.wires.ModelWire;
handleAddedListeners = new ArrayList<>();
handleRemovedListeners = new ArrayList<>();
- ViewModelModifiable model = editor.getSubmodel();
+ LogicModelModifiable model = editor.getSubmodel();
model.addComponentAddedListener(c -> registerComponent(c));
System.err.println("Warning! HandleManager was already initialized.");
else
{
- ViewModelModifiable model = editor.getSubmodel();
+ LogicModelModifiable model = editor.getSubmodel();
Map<String, ModelComponent> compsByName = model.getComponentsByName();
Set<ModelComponent> comps = new HashSet<>(compsByName.values());
ModelComponent interfaceComp = compsByName.get(SubmodelComponent.SUBMODEL_INTERFACE_NAME);
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.model.editor.states.EditorState;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.wires.ModelWire;
public class WireHandle extends Handle
private boolean selected = false;
private final static double WIDTH = 2.0;
private final static double WIDTH_SQUARED = WIDTH * WIDTH;
- private final ViewModelModifiable model;
+ private final LogicModelModifiable model;
public final ModelWire parent;
- public WireHandle(ViewModelModifiable model, ModelWire parent)
+ public WireHandle(LogicModelModifiable model, ModelWire parent)
{
super(5);
this.model = model;
import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.LogicModel;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
{
private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false;
- private final ViewModel model;
+ private final LogicModel model;
- public LogicUICanvas(Composite parent, int style, ViewModel model)
+ public LogicUICanvas(Composite parent, int style, LogicModel model)
{
super(parent, style, Preferences.current().getBoolean("net.mograsim.logic.model.improvetext"));
}
}
- private void openDebugSetHighLevelStateShell(ViewModel model)
+ private void openDebugSetHighLevelStateShell(LogicModel model)
{
Shell debugShell = new Shell();
debugShell.setLayout(new GridLayout(2, false));
debugShell.open();
}
- private void recalculateComponentSelector(List<ModelComponent> componentsByItemIndex, Combo componentSelector, ViewModel model)
+ private void recalculateComponentSelector(List<ModelComponent> componentsByItemIndex, Combo componentSelector, LogicModel model)
{
componentsByItemIndex.clear();
componentSelector.setItems();
addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model);
}
- private void addComponentSelectorItems(List<ModelComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
+ private void addComponentSelectorItems(List<ModelComponent> componentsByItemIndex, String base, Combo componentSelector, LogicModel model)
{
model.getComponentsByName().values().stream().sorted((c1, c2) -> c1.name.compareTo(c2.name)).forEach(c ->
{
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.LogicModel;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.preferences.Preferences;
{
private static final boolean DRAW_PINS = false;
- private final ViewModel model;
+ private final LogicModel model;
- public LogicUIRenderer(ViewModel model)
+ public LogicUIRenderer(LogicModel model)
{
this.model = model;
}
import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
-import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.LogicModel;
/**
* Standalone simulation visualizer graphical user interface.
private final Shell shell;
private final LogicUICanvas ui;
- public LogicUIStandaloneGUI(ViewModel model)
+ public LogicUIStandaloneGUI(LogicModel model)
{
display = new Display();
shell = new Shell(display);
import java.util.function.Consumer;
import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.CoreModelParameters;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
public class SimpleLogicUIStandalone
{
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
+ public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel)
{
- executeVisualisation(setupViewModel, (Consumer<VisualisationObjects>) null);
+ executeVisualisation(setupLogicModel, (Consumer<VisualisationObjects>) null);
}
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, Consumer<VisualisationObjects> beforeRun)
+ public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, Consumer<VisualisationObjects> beforeRun)
{
CoreModelParameters params = new CoreModelParameters();
params.gateProcessTime = 50;
params.wireTravelTime = 10;
- executeVisualisation(setupViewModel, params, beforeRun);
+ executeVisualisation(setupLogicModel, params, beforeRun);
}
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, CoreModelParameters params)
+ public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params)
{
- executeVisualisation(setupViewModel, params, null);
+ executeVisualisation(setupLogicModel, params, null);
}
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, CoreModelParameters params,
+ public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params,
Consumer<VisualisationObjects> beforeRun)
{
- // setup view model
- ViewModelModifiable viewModel = new ViewModelModifiable();
- setupViewModel.accept(viewModel);
+ // setup logic model
+ LogicModelModifiable logicModel = new LogicModelModifiable();
+ setupLogicModel.accept(logicModel);
// convert to core model
- Timeline timeline = LogicCoreAdapter.convert(viewModel, params);
+ Timeline timeline = LogicCoreAdapter.convert(logicModel, params);
// initialize UI and executer
- LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
+ LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel);
LogicExecuter exec = new LogicExecuter(timeline);
if (beforeRun != null)
- beforeRun.accept(new VisualisationObjects(viewModel, timeline, ui, exec));
+ beforeRun.accept(new VisualisationObjects(logicModel, timeline, ui, exec));
// run it
exec.startLiveExecution();
public static class VisualisationObjects
{
- public final ViewModelModifiable model;
+ public final LogicModelModifiable model;
public final Timeline timeline;
public final LogicUIStandaloneGUI gui;
public final LogicExecuter executer;
- public VisualisationObjects(ViewModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
+ public VisualisationObjects(LogicModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
{
this.model = model;
this.timeline = timeline;
package net.mograsim.logic.model.examples;
import net.mograsim.logic.model.SimpleLogicUIStandalone;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.ModelBitDisplay;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
SimpleLogicUIStandalone.executeVisualisation(ClickableSubmodelComponentsTest::createExample);
}
- public static void createExample(ViewModelModifiable model)
+ public static void createExample(LogicModelModifiable model)
{
@SuppressWarnings("unused") // Wire
SimpleRectangularSubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 1, "")
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.mograsim.logic.model.SimpleLogicUIStandalone;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
import net.mograsim.logic.model.model.components.atomic.ModelNotGate;
import net.mograsim.logic.model.model.components.atomic.ModelOrGate;
}
@SuppressWarnings("unused") // for Wires being created
- public static void createRSLatchExample(ViewModelModifiable model)
+ public static void createRSLatchExample(LogicModelModifiable model)
{
ModelManualSwitch rIn = new ModelManualSwitch(model, 1);
rIn.moveTo(100, 100);
--- /dev/null
+package net.mograsim.logic.model.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import net.mograsim.logic.model.model.components.ModelComponent;
+import net.mograsim.logic.model.model.wires.ModelWire;
+
+public class LogicModel
+{
+ private final Map<String, ModelComponent> components;
+ private final Map<String, Runnable> componentDestroyFunctions;
+ private final Map<String, ModelComponent> componentsUnmodifiable;
+ private final Map<String, ModelWire> wires;
+ private final Map<String, Runnable> wireDestroyFunctions;
+ private final Map<String, ModelWire> wiresUnmodifiable;
+
+ private final List<Consumer<? super ModelComponent>> componentAddedListeners;
+ private final List<Consumer<? super ModelComponent>> componentRemovedListeners;
+ private final List<Consumer<? super ModelWire>> wireAddedListeners;
+ private final List<Consumer<? super ModelWire>> wireRemovedListeners;
+ private final List<Consumer<? super Runnable>> redrawHandlerChangedListeners;
+
+ private Runnable redrawHandler;
+
+ protected LogicModel()
+ {
+ components = new HashMap<>();
+ componentDestroyFunctions = new HashMap<>();
+ componentsUnmodifiable = Collections.unmodifiableMap(components);
+ wires = new HashMap<>();
+ wireDestroyFunctions = new HashMap<>();
+ wiresUnmodifiable = Collections.unmodifiableMap(wires);
+
+ componentAddedListeners = new ArrayList<>();
+ componentRemovedListeners = new ArrayList<>();
+ wireAddedListeners = new ArrayList<>();
+ wireRemovedListeners = new ArrayList<>();
+ redrawHandlerChangedListeners = new ArrayList<>();
+ }
+
+ /**
+ * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
+ * code as it is automatically called in {@link ModelComponent}'s constructor.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void componentCreated(ModelComponent component, Runnable destroyed)
+ {
+ if (components.containsKey(component.name))
+ throw new IllegalStateException("Don't add the same component twice!");
+ components.put(component.name, component);
+ componentDestroyFunctions.put(component.name, destroyed);
+ callComponentAddedListeners(component);
+ requestRedraw();
+ }
+
+ /**
+ * Destroyes the given component, removes it from the list of components and calls all componentRemovedListeners.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void destroyComponent(ModelComponent component)
+ {
+ componentDestroyFunctions.get(component.name).run();
+ if (!components.containsKey(component.name))
+ throw new IllegalStateException("Don't remove the same component twice!");
+ components.remove(component.name);
+ callComponentRemovedListeners(component);
+ requestRedraw();
+ }
+
+ /**
+ * Adds the given wire to the list of wires and calls all wireAddedListeners.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void wireCreated(ModelWire wire, Runnable destroyed)
+ {
+ if (wires.containsKey(wire.name))
+ throw new IllegalStateException("Don't add the same wire twice!");
+ wires.put(wire.name, wire);
+ wireDestroyFunctions.put(wire.name, destroyed);
+ callWireAddedListeners(wire);
+ requestRedraw();
+ }
+
+ /**
+ * Destroys the given wire, removes it from the list of wires and calls all wireRemovedListeners.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void destroyWire(ModelWire wire)
+ {
+ wireDestroyFunctions.get(wire.name).run();
+ if (!wires.containsKey(wire.name))
+ throw new IllegalStateException("Don't remove the same wire twice!");
+ wires.remove(wire.name);
+ callWireRemovedListeners(wire);
+ requestRedraw();
+ }
+
+ public Map<String, ModelComponent> getComponentsByName()
+ {
+ return componentsUnmodifiable;
+ }
+
+ public Map<String, ModelWire> getWiresByName()
+ {
+ return wiresUnmodifiable;
+ }
+
+ // @formatter:off
+ public void addComponentAddedListener (Consumer<? super ModelComponent> listener) {componentAddedListeners .add (listener);}
+ public void addComponentRemovedListener (Consumer<? super ModelComponent> listener) {componentRemovedListeners .add (listener);}
+ public void addWireAddedListener (Consumer<? super ModelWire > listener) {wireAddedListeners .add (listener);}
+ public void addWireRemovedListener (Consumer<? super ModelWire > listener) {wireRemovedListeners .add (listener);}
+ public void addRedrawHandlerChangedListener (Consumer<? super Runnable > listener) {redrawHandlerChangedListeners.add (listener);}
+
+ public void removeComponentAddedListener (Consumer<? super ModelComponent> listener) {componentAddedListeners .remove(listener);}
+ public void removeComponentRemovedListener (Consumer<? super ModelComponent> listener) {componentRemovedListeners .remove(listener);}
+ public void removeWireAddedListener (Consumer<? super ModelWire > listener) {wireAddedListeners .remove(listener);}
+ public void removeWireRemovedListener (Consumer<? super ModelWire > listener) {wireRemovedListeners .remove(listener);}
+ public void removeRedrawHandlerChangedListener(Consumer<? super Runnable > listener) {redrawHandlerChangedListeners.remove(listener);}
+
+ private void callComponentAddedListeners (ModelComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
+ private void callComponentRemovedListeners (ModelComponent c) {componentRemovedListeners .forEach(l -> l.accept(c));}
+ private void callWireAddedListeners (ModelWire w) {wireAddedListeners .forEach(l -> l.accept(w));}
+ private void callWireRemovedListeners (ModelWire w) {wireRemovedListeners .forEach(l -> l.accept(w));}
+ private void callRedrawHandlerChangedListener(Runnable r) {redrawHandlerChangedListeners.forEach(l -> l.accept(r));}
+ // @formatter:on
+
+ public void setRedrawHandler(Runnable handler)
+ {
+ this.redrawHandler = handler;
+ callRedrawHandlerChangedListener(handler);
+ }
+
+ public Runnable getRedrawHandler()
+ {
+ return redrawHandler;
+ }
+
+ public void requestRedraw()
+ {
+ if (redrawHandler != null)
+ redrawHandler.run();
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model;
+
+import java.util.Set;
+
+import net.mograsim.logic.model.model.components.ModelComponent;
+import net.mograsim.logic.model.model.wires.ModelWire;
+
+public class LogicModelModifiable extends LogicModel
+{
+ public String getDefaultComponentName(ModelComponent component)
+ {
+ Set<String> componentNames = getComponentsByName().keySet();
+ // TODO get the ID of component
+ // The following does not work because this method is called in the constructor of DeserializedSubmodelComponent at a time where
+ // idForSerializingOverride is not yet set
+// String componentID = null;
+// if (component instanceof DeserializedSubmodelComponent)
+// componentID = ((DeserializedSubmodelComponent) component).idForSerializingOverride;
+// if (componentID == null)
+// componentID = component.getClass().getSimpleName();
+ String componentID = component.getClass().getSimpleName();
+ String nameBase = componentID + '#';
+ for (int i = 0;; i++)
+ {
+ String nameCandidate = nameBase + i;
+ if (!componentNames.contains(nameCandidate))
+ return nameCandidate;
+ }
+ }
+
+ public String getDefaultWireName()
+ {
+ Set<String> wireNames = getWiresByName().keySet();
+ for (int i = 0;; i++)
+ {
+ String nameCandidate = "unnamedWire#" + i;
+ if (!wireNames.contains(nameCandidate))
+ return nameCandidate;
+ }
+ }
+
+ @Override
+ public void componentCreated(ModelComponent component, Runnable destroyed)
+ {
+ super.componentCreated(component, destroyed);
+ }
+
+ @Override
+ public void destroyComponent(ModelComponent component)
+ {
+ super.destroyComponent(component);
+ }
+
+ @Override
+ public void wireCreated(ModelWire wire, Runnable destroyed)
+ {
+ super.wireCreated(wire, destroyed);
+ }
+
+ @Override
+ public void destroyWire(ModelWire wire)
+ {
+ super.destroyWire(wire);
+ }
+}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.model.model;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-import net.mograsim.logic.model.model.components.ModelComponent;
-import net.mograsim.logic.model.model.wires.ModelWire;
-
-public class ViewModel
-{
- private final Map<String, ModelComponent> components;
- private final Map<String, Runnable> componentDestroyFunctions;
- private final Map<String, ModelComponent> componentsUnmodifiable;
- private final Map<String, ModelWire> wires;
- private final Map<String, Runnable> wireDestroyFunctions;
- private final Map<String, ModelWire> wiresUnmodifiable;
-
- private final List<Consumer<? super ModelComponent>> componentAddedListeners;
- private final List<Consumer<? super ModelComponent>> componentRemovedListeners;
- private final List<Consumer<? super ModelWire>> wireAddedListeners;
- private final List<Consumer<? super ModelWire>> wireRemovedListeners;
- private final List<Consumer<? super Runnable>> redrawHandlerChangedListeners;
-
- private Runnable redrawHandler;
-
- protected ViewModel()
- {
- components = new HashMap<>();
- componentDestroyFunctions = new HashMap<>();
- componentsUnmodifiable = Collections.unmodifiableMap(components);
- wires = new HashMap<>();
- wireDestroyFunctions = new HashMap<>();
- wiresUnmodifiable = Collections.unmodifiableMap(wires);
-
- componentAddedListeners = new ArrayList<>();
- componentRemovedListeners = new ArrayList<>();
- wireAddedListeners = new ArrayList<>();
- wireRemovedListeners = new ArrayList<>();
- redrawHandlerChangedListeners = new ArrayList<>();
- }
-
- /**
- * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
- * code as it is automatically called in {@link ModelComponent}'s constructor.
- *
- * @author Daniel Kirschten
- */
- protected void componentCreated(ModelComponent component, Runnable destroyed)
- {
- if (components.containsKey(component.name))
- throw new IllegalStateException("Don't add the same component twice!");
- components.put(component.name, component);
- componentDestroyFunctions.put(component.name, destroyed);
- callComponentAddedListeners(component);
- requestRedraw();
- }
-
- /**
- * Destroyes the given component, removes it from the list of components and calls all componentRemovedListeners.
- *
- * @author Daniel Kirschten
- */
- protected void destroyComponent(ModelComponent component)
- {
- componentDestroyFunctions.get(component.name).run();
- if (!components.containsKey(component.name))
- throw new IllegalStateException("Don't remove the same component twice!");
- components.remove(component.name);
- callComponentRemovedListeners(component);
- requestRedraw();
- }
-
- /**
- * Adds the given wire to the list of wires and calls all wireAddedListeners.
- *
- * @author Daniel Kirschten
- */
- protected void wireCreated(ModelWire wire, Runnable destroyed)
- {
- if (wires.containsKey(wire.name))
- throw new IllegalStateException("Don't add the same wire twice!");
- wires.put(wire.name, wire);
- wireDestroyFunctions.put(wire.name, destroyed);
- callWireAddedListeners(wire);
- requestRedraw();
- }
-
- /**
- * Destroys the given wire, removes it from the list of wires and calls all wireRemovedListeners.
- *
- * @author Daniel Kirschten
- */
- protected void destroyWire(ModelWire wire)
- {
- wireDestroyFunctions.get(wire.name).run();
- if (!wires.containsKey(wire.name))
- throw new IllegalStateException("Don't remove the same wire twice!");
- wires.remove(wire.name);
- callWireRemovedListeners(wire);
- requestRedraw();
- }
-
- public Map<String, ModelComponent> getComponentsByName()
- {
- return componentsUnmodifiable;
- }
-
- public Map<String, ModelWire> getWiresByName()
- {
- return wiresUnmodifiable;
- }
-
- // @formatter:off
- public void addComponentAddedListener (Consumer<? super ModelComponent> listener) {componentAddedListeners .add (listener);}
- public void addComponentRemovedListener (Consumer<? super ModelComponent> listener) {componentRemovedListeners .add (listener);}
- public void addWireAddedListener (Consumer<? super ModelWire > listener) {wireAddedListeners .add (listener);}
- public void addWireRemovedListener (Consumer<? super ModelWire > listener) {wireRemovedListeners .add (listener);}
- public void addRedrawHandlerChangedListener (Consumer<? super Runnable > listener) {redrawHandlerChangedListeners.add (listener);}
-
- public void removeComponentAddedListener (Consumer<? super ModelComponent> listener) {componentAddedListeners .remove(listener);}
- public void removeComponentRemovedListener (Consumer<? super ModelComponent> listener) {componentRemovedListeners .remove(listener);}
- public void removeWireAddedListener (Consumer<? super ModelWire > listener) {wireAddedListeners .remove(listener);}
- public void removeWireRemovedListener (Consumer<? super ModelWire > listener) {wireRemovedListeners .remove(listener);}
- public void removeRedrawHandlerChangedListener(Consumer<? super Runnable > listener) {redrawHandlerChangedListeners.remove(listener);}
-
- private void callComponentAddedListeners (ModelComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
- private void callComponentRemovedListeners (ModelComponent c) {componentRemovedListeners .forEach(l -> l.accept(c));}
- private void callWireAddedListeners (ModelWire w) {wireAddedListeners .forEach(l -> l.accept(w));}
- private void callWireRemovedListeners (ModelWire w) {wireRemovedListeners .forEach(l -> l.accept(w));}
- private void callRedrawHandlerChangedListener(Runnable r) {redrawHandlerChangedListeners.forEach(l -> l.accept(r));}
- // @formatter:on
-
- public void setRedrawHandler(Runnable handler)
- {
- this.redrawHandler = handler;
- callRedrawHandlerChangedListener(handler);
- }
-
- public Runnable getRedrawHandler()
- {
- return redrawHandler;
- }
-
- public void requestRedraw()
- {
- if (redrawHandler != null)
- redrawHandler.run();
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.model.model;
-
-import java.util.Set;
-
-import net.mograsim.logic.model.model.components.ModelComponent;
-import net.mograsim.logic.model.model.wires.ModelWire;
-
-public class ViewModelModifiable extends ViewModel
-{
- public String getDefaultComponentName(ModelComponent component)
- {
- Set<String> componentNames = getComponentsByName().keySet();
- // TODO get the ID of component
- // The following does not work because this method is called in the constructor of DeserializedSubmodelComponent at a time where
- // idForSerializingOverride is not yet set
-// String componentID = null;
-// if (component instanceof DeserializedSubmodelComponent)
-// componentID = ((DeserializedSubmodelComponent) component).idForSerializingOverride;
-// if (componentID == null)
-// componentID = component.getClass().getSimpleName();
- String componentID = component.getClass().getSimpleName();
- String nameBase = componentID + '#';
- for (int i = 0;; i++)
- {
- String nameCandidate = nameBase + i;
- if (!componentNames.contains(nameCandidate))
- return nameCandidate;
- }
- }
-
- public String getDefaultWireName()
- {
- Set<String> wireNames = getWiresByName().keySet();
- for (int i = 0;; i++)
- {
- String nameCandidate = "unnamedWire#" + i;
- if (!wireNames.contains(nameCandidate))
- return nameCandidate;
- }
- }
-
- @Override
- public void componentCreated(ModelComponent component, Runnable destroyed)
- {
- super.componentCreated(component, destroyed);
- }
-
- @Override
- public void destroyComponent(ModelComponent component)
- {
- super.destroyComponent(component);
- }
-
- @Override
- public void wireCreated(ModelWire wire, Runnable destroyed)
- {
- super.wireCreated(wire, destroyed);
- }
-
- @Override
- public void destroyWire(ModelWire wire)
- {
- super.destroyWire(wire);
- }
-}
\ No newline at end of file
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.serializing.IdentifyParams;
import net.mograsim.logic.model.serializing.JSONSerializable;
/**
* The base class for all model components.<br>
- * A <code>ModelComponent</code> has a reference to the ViewModel it belongs to.<br>
+ * A <code>ModelComponent</code> has a reference to the LogicModel it belongs to.<br>
* A <code>ModelComponent</code> has a name. This name is unique in the model the <code>ModelComponent</code> belongs to.<br>
* A <code>ModelComponent</code> has a position and size. The size can only be modified by subclasses.
*
/**
* The model this component is a part of.
*/
- protected final ViewModelModifiable model;
+ protected final LogicModelModifiable model;
/**
* The name of this component. Is unique for all components in its model.
*/
// creation and destruction
- public ModelComponent(ViewModelModifiable model, String name)
+ public ModelComponent(LogicModelModifiable model, String name)
{
this.model = model;
this.name = name == null ? model.getDefaultComponentName(this) : name;
this.pinRemovedListeners = new ArrayList<>();
// TODO this will crash the high level state debug shell because submodel is not yet set.
- // The same problem exists in ViewModelModifiable.getDefaultComponentName; see there
+ // The same problem exists in LogicModelModifiable.getDefaultComponentName; see there
model.componentCreated(this, this::destroyed);
}
/**
- * Destroys this component. This method is called from {@link ViewModelModifiable#componentDestroyed(ModelComponent) destroyComponent()}
- * of the model this component is a part of.<br>
+ * Destroys this component. This method is called from {@link LogicModelModifiable#componentDestroyed(ModelComponent)
+ * destroyComponent()} of the model this component is a part of.<br>
* When overriding, make sure to also call the original implementation.
*
* @author Daniel Kirschten
package net.mograsim.logic.model.model.components.atomic;
import net.mograsim.logic.core.components.gates.CoreAndGate;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
public class ModelAndGate extends SimpleRectangularModelGate
{
- public ModelAndGate(ViewModelModifiable model, int logicWidth)
+ public ModelAndGate(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelAndGate(ViewModelModifiable model, int logicWidth, String name)
+ public ModelAndGate(LogicModelModifiable model, int logicWidth, String name)
{
super(model, "AndGate", "&", false, logicWidth, name);
setInputCount(2);// TODO make variable
import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.components.CoreBitDisplay;
import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
private final LogicObserver logicObs;
private CoreBitDisplay bitDisplay;
- public ModelBitDisplay(ViewModelModifiable model, int logicWidth)
+ public ModelBitDisplay(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelBitDisplay(ViewModelModifiable model, int logicWidth, String name)
+ public ModelBitDisplay(LogicModelModifiable model, int logicWidth, String name)
{
super(model, name);
this.logicWidth = logicWidth;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.components.CoreClock;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.Orientation;
import net.mograsim.logic.model.model.components.OrientationCalculator;
private OrientationCalculator oc;
private CoreClock clock;
- public ModelClock(ViewModelModifiable model, ModelClockParams params)
+ public ModelClock(LogicModelModifiable model, ModelClockParams params)
{
this(model, params, null);
}
- public ModelClock(ViewModelModifiable model, ModelClockParams params, String name)
+ public ModelClock(LogicModelModifiable model, ModelClockParams params, String name)
{
super(model, name);
this.params = params;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
public final BitVector bits;
- public ModelFixedOutput(ViewModelModifiable model, BitVector bits, String name)
+ public ModelFixedOutput(LogicModelModifiable model, BitVector bits, String name)
{
super(model, name);
this.bits = bits;
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
private final LogicObserver logicObs;
private CoreManualSwitch manualSwitch;
- public ModelManualSwitch(ViewModelModifiable model, int logicWidth)
+ public ModelManualSwitch(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelManualSwitch(ViewModelModifiable model, int logicWidth, String name)
+ public ModelManualSwitch(LogicModelModifiable model, int logicWidth, String name)
{
super(model, name);
this.logicWidth = logicWidth;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.types.BitVectorFormatter;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
private final ReadEnd[] inputEnds;
private ReadEnd outputEnd;
- public ModelMerger(ViewModelModifiable model, int logicWidth)
+ public ModelMerger(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelMerger(ViewModelModifiable model, int logicWidth, String name)
+ public ModelMerger(LogicModelModifiable model, int logicWidth, String name)
{
super(model, name);
this.logicWidth = logicWidth;
package net.mograsim.logic.model.model.components.atomic;
import net.mograsim.logic.core.components.gates.CoreNandGate;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
public class ModelNandGate extends SimpleRectangularModelGate
{
- public ModelNandGate(ViewModelModifiable model, int logicWidth)
+ public ModelNandGate(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelNandGate(ViewModelModifiable model, int logicWidth, String name)
+ public ModelNandGate(LogicModelModifiable model, int logicWidth, String name)
{
super(model, "NandGate", "&", true, logicWidth, name);
setInputCount(2);// TODO make variable
package net.mograsim.logic.model.model.components.atomic;
import net.mograsim.logic.core.components.gates.CoreNotGate;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
public class ModelNotGate extends SimpleRectangularModelGate
{
- public ModelNotGate(ViewModelModifiable model, int logicWidth)
+ public ModelNotGate(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelNotGate(ViewModelModifiable model, int logicWidth, String name)
+ public ModelNotGate(LogicModelModifiable model, int logicWidth, String name)
{
super(model, "NotGate", "1", true, logicWidth, name);
setInputCount(1);
package net.mograsim.logic.model.model.components.atomic;
import net.mograsim.logic.core.components.gates.CoreOrGate;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
public class ModelOrGate extends SimpleRectangularModelGate
{
- public ModelOrGate(ViewModelModifiable model, int logicWidth)
+ public ModelOrGate(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelOrGate(ViewModelModifiable model, int logicWidth, String name)
+ public ModelOrGate(LogicModelModifiable model, int logicWidth, String name)
{
super(model, "OrGate", "\u22651", false, logicWidth, name);// ">=1"
setInputCount(2);
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.types.BitVectorFormatter;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
private ReadEnd inputEnd;
private final ReadEnd[] outputEnds;
- public ModelSplitter(ViewModelModifiable model, int logicWidth)
+ public ModelSplitter(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelSplitter(ViewModelModifiable model, int logicWidth, String name)
+ public ModelSplitter(LogicModelModifiable model, int logicWidth, String name)
{
super(model, name);
this.logicWidth = logicWidth;
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
import net.mograsim.logic.model.modeladapter.componentadapters.NoLogicAdapter;
private final String text;
private boolean calculatedSize;
- public ModelTextComponent(ViewModelModifiable model, String text)
+ public ModelTextComponent(LogicModelModifiable model, String text)
{
this(model, text, null);
}
- public ModelTextComponent(ViewModelModifiable model, String text, String name)
+ public ModelTextComponent(LogicModelModifiable model, String text, String name)
{
super(model, name);
this.text = text;
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.Orientation;
import net.mograsim.logic.model.model.components.OrientationCalculator;
private ModelTriStateBufferParams params;
private OrientationCalculator oc;
- public ModelTriStateBuffer(ViewModelModifiable model, ModelTriStateBufferParams params)
+ public ModelTriStateBuffer(LogicModelModifiable model, ModelTriStateBufferParams params)
{
this(model, params, null);
}
- public ModelTriStateBuffer(ViewModelModifiable model, ModelTriStateBufferParams params, String name)
+ public ModelTriStateBuffer(LogicModelModifiable model, ModelTriStateBufferParams params, String name)
{
super(model, name);
this.params = params;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
// creation and destruction
- public SimpleRectangularHardcodedModelComponent(ViewModelModifiable model, String id, String name, String centerText)
+ public SimpleRectangularHardcodedModelComponent(LogicModelModifiable model, String id, String name, String centerText)
{
super(model, name);
this.id = id;
import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
private MovablePin outputPin;
private final List<Pin> inputPins;
- protected SimpleRectangularModelGate(ViewModelModifiable model, String id, String label, boolean isInverted, int logicWidth, String name)
+ protected SimpleRectangularModelGate(LogicModelModifiable model, String id, String label, boolean isInverted, int logicWidth, String name)
{
super(model, name);
this.id = id;
import java.util.HashSet;
import java.util.List;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.model.wires.PinUsage;
private final List<String> outputPinNames;
private final List<String> outputPinNamesUnmodifiable;
- public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
+ public SimpleRectangularSubmodelComponent(LogicModelModifiable model, int logicWidth, String label)
{
this(model, logicWidth, label, null);
}
- public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label, String name)
+ public SimpleRectangularSubmodelComponent(LogicModelModifiable model, int logicWidth, String label, String name)
{
super(model, name);
this.label = label;
import net.haspamelodica.swt.helper.gcs.TranslatedGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.model.LogicUIRenderer;
-import net.mograsim.logic.model.model.ViewModel;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModel;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
/**
* A modifiable view of {@link #submodel}.
*/
- protected final ViewModelModifiable submodelModifiable;
+ protected final LogicModelModifiable submodelModifiable;
/**
* The model this {@link SubmodelComponent} consists of.
*/
- public final ViewModel submodel;
+ public final LogicModel submodel;
/**
* The list of all submodel interface pins of this {@link SubmodelComponent} on the submodel side.
*/
// creation and destruction
- public SubmodelComponent(ViewModelModifiable model, String name)
+ public SubmodelComponent(LogicModelModifiable model, String name)
{
super(model, name);
- this.submodelModifiable = new ViewModelModifiable();
+ this.submodelModifiable = new LogicModelModifiable();
this.submodel = submodelModifiable;
this.submodelPins = new HashMap<>();
this.submodelMovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.Pin;
import net.mograsim.logic.model.serializing.IdentifyParams;
public class SubmodelInterface extends ModelComponent
{
- public SubmodelInterface(ViewModelModifiable model, String name)
+ public SubmodelInterface(LogicModelModifiable model, String name)
{
super(model, name);
}
import net.mograsim.logic.core.types.BitVectorFormatter;
import net.mograsim.logic.core.wires.CoreWire;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.preferences.ColorDefinition;
import net.mograsim.preferences.ColorManager;
import net.mograsim.preferences.Preferences;
/**
* The model this wire is a part of.
*/
- private final ViewModelModifiable model;
+ private final LogicModelModifiable model;
/**
* The name of this wire. Is unique for all wires in its model.
*/
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2)
+ public ModelWire(LogicModelModifiable model, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2)
{
this(model, null, pin1, pin2);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, ModelWireCrossPoint pin1, Pin pin2)
+ public ModelWire(LogicModelModifiable model, ModelWireCrossPoint pin1, Pin pin2)
{
this(model, null, pin1, pin2);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, Pin pin1, ModelWireCrossPoint pin2)
+ public ModelWire(LogicModelModifiable model, Pin pin1, ModelWireCrossPoint pin2)
{
this(model, null, pin1, pin2);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, Pin pin1, Pin pin2)
+ public ModelWire(LogicModelModifiable model, Pin pin1, Pin pin2)
{
this(model, null, pin1, pin2);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2, Point... path)
{
this(model, null, pin1, pin2, path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, ModelWireCrossPoint pin1, Pin pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, ModelWireCrossPoint pin1, Pin pin2, Point... path)
{
this(model, null, pin1, pin2, path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, Pin pin1, ModelWireCrossPoint pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, Pin pin1, ModelWireCrossPoint pin2, Point... path)
{
this(model, null, pin1, pin2, path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, Pin pin1, Pin pin2, Point... path)
{
this(model, null, pin1, pin2, path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2)
+ public ModelWire(LogicModelModifiable model, String name, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2)
{
this(model, name, pin1, pin2, (Point[]) null);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, ModelWireCrossPoint pin1, Pin pin2)
+ public ModelWire(LogicModelModifiable model, String name, ModelWireCrossPoint pin1, Pin pin2)
{
this(model, name, pin1, pin2, (Point[]) null);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, Pin pin1, ModelWireCrossPoint pin2)
+ public ModelWire(LogicModelModifiable model, String name, Pin pin1, ModelWireCrossPoint pin2)
{
this(model, name, pin1, pin2, (Point[]) null);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, Pin pin1, Pin pin2)
+ public ModelWire(LogicModelModifiable model, String name, Pin pin1, Pin pin2)
{
this(model, name, pin1, pin2, (Point[]) null);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, String name, ModelWireCrossPoint pin1, ModelWireCrossPoint pin2, Point... path)
{
this(model, name, pin1.getPin(), pin2.getPin(), path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, ModelWireCrossPoint pin1, Pin pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, String name, ModelWireCrossPoint pin1, Pin pin2, Point... path)
{
this(model, name, pin1.getPin(), pin2, path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, Pin pin1, ModelWireCrossPoint pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, String name, Pin pin1, ModelWireCrossPoint pin2, Point... path)
{
this(model, name, pin1, pin2.getPin(), path);
}
*
* @author Daniel Kirschten
*/
- public ModelWire(ViewModelModifiable model, String name, Pin pin1, Pin pin2, Point... path)
+ public ModelWire(LogicModelModifiable model, String name, Pin pin1, Pin pin2, Point... path)
{
this.model = model;
this.name = name == null ? model.getDefaultWireName() : name;
}
/**
- * Destroys this wire. This method is called from {@link ViewModelModifiable#wireDestroyed(ModelWire) wireDestroyed()} of the model this
+ * Destroys this wire. This method is called from {@link LogicModelModifiable#wireDestroyed(ModelWire) wireDestroyed()} of the model this
* wire is a part of.
*
* @author Daniel Kirschten
import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.types.BitVectorFormatter;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.serializing.IdentifyParams;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
// creation and destruction
- public ModelWireCrossPoint(ViewModelModifiable model, int logicWidth)
+ public ModelWireCrossPoint(LogicModelModifiable model, int logicWidth)
{
this(model, logicWidth, null);
}
- public ModelWireCrossPoint(ViewModelModifiable model, int logicWidth, String name)
+ public ModelWireCrossPoint(LogicModelModifiable model, int logicWidth, String name)
{
super(model, name);
this.logicWidth = logicWidth;
import net.mograsim.logic.model.model.components.ModelComponent;
/**
- * A connection interface between a ModelComponent and the rest of a ViewModel. Pins usually are created by {@link ModelComponent}s
+ * A connection interface between a ModelComponent and the rest of a LogicModel. Pins usually are created by {@link ModelComponent}s
* themselves. <br>
* A pin has a name identifying it. Pin names are unique for a {@link ModelComponent}: Every pin of a {@link ModelComponent} has a different
* name, but different {@link ModelComponent}s can have pins with the same name.
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.core.wires.CoreWire;
import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
-import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.LogicModel;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter);
}
- public static Timeline convert(ViewModel viewModel, CoreModelParameters params)
+ public static Timeline convert(LogicModel logicModel, CoreModelParameters params)
{
// TODO replace Timeline with CoreModel as soon as it exists
Timeline timeline = new Timeline(10);
- convert(viewModel, params, timeline, Map.of());
+ convert(logicModel, params, timeline, Map.of());
return timeline;
}
- private static void convert(ViewModel viewModel, CoreModelParameters params, Timeline timeline, Map<Pin, CoreWire> externalWires)
+ private static void convert(LogicModel logicModel, CoreModelParameters params, Timeline timeline, Map<Pin, CoreWire> externalWires)
{
- Map<Pin, CoreWire> logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWiresByName().values(), externalWires,
+ Map<Pin, CoreWire> logicWiresPerPin = convertWires(getAllPins(logicModel), logicModel.getWiresByName().values(), externalWires,
params, timeline);
Map<Pin, CoreWire> logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin);
- for (ModelComponent modelComp : viewModel.getComponentsByName().values())
+ for (ModelComponent modelComp : logicModel.getComponentsByName().values())
{
if (modelComp instanceof SubmodelComponent)
{
}
}
- private static Set<Pin> getAllPins(ViewModel viewModel)
+ private static Set<Pin> getAllPins(LogicModel logicModel)
{
- return viewModel.getComponentsByName().values().stream().flatMap(component -> component.getPins().values().stream())
+ return logicModel.getComponentsByName().values().stream().flatMap(component -> component.getPins().values().stream())
.collect(Collectors.toSet());
}
import com.google.gson.JsonElement;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
* If a DeserializedSubmodelComponent is part of another SubmodelComponent, when it it serialized, it should not return its internal
* structure, but rather the component ID used to create it.
*
- * @see SubmodelComponentSerializer#deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)
+ * @see SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
* SubmodelComponentSerializer.deserialize(...)
* @see SubmodelComponentSerializer#serialize(SubmodelComponent, java.util.function.Function) SubmodelComponentSerializer.serialize(...)
*/
*/
public final JsonElement paramsForSerializingOverride;
- public DeserializedSubmodelComponent(ViewModelModifiable model, String name, String idForSerializingOverride,
+ public DeserializedSubmodelComponent(LogicModelModifiable model, String name, String idForSerializingOverride,
JsonElement paramsForSerializingOverride)
{
super(model, name);
super.setHighLevelStateHandler(handler);
}
- public ViewModelModifiable getSubmodelModifiable()
+ public LogicModelModifiable getSubmodelModifiable()
{
return submodelModifiable;
}
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.util.JsonHandler;
componentSuppliers.put(id, componentSupplier);
}
- public static ModelComponent createComponent(ViewModelModifiable model, String id)
+ public static ModelComponent createComponent(LogicModelModifiable model, String id)
{
return createComponent(model, id, (String) null);
}
- public static ModelComponent createComponent(ViewModelModifiable model, String id, String name)
+ public static ModelComponent createComponent(LogicModelModifiable model, String id, String name)
{
return createComponent(model, id, JsonNull.INSTANCE, name);
}
- public static ModelComponent createComponent(ViewModelModifiable model, String id, JsonElement params)
+ public static ModelComponent createComponent(LogicModelModifiable model, String id, JsonElement params)
{
return createComponent(model, id, params, null);
}
- public static ModelComponent createComponent(ViewModelModifiable model, String id, JsonElement params, String name)
+ public static ModelComponent createComponent(LogicModelModifiable model, String id, JsonElement params, String name)
{
if (id == null)
throw new NullPointerException("Component ID is null");
return id.matches("jsonfile:(.+)|(resloader:([^:]+):)?(jsonres|class):[^:]+");
}
- private static SubmodelComponent loadComponentFromJsonObject(ViewModelModifiable model, String id, String name, JsonObject jsonContents)
+ private static SubmodelComponent loadComponentFromJsonObject(LogicModelModifiable model, String id, String name, JsonObject jsonContents)
{
componentCache.putIfAbsent(id, jsonContents);
SerializablePojo jsonContentsAsSerializablePojo = JsonHandler.parser.fromJson(jsonContents, SerializablePojo.class);
public static interface ComponentSupplier
{
- public ModelComponent create(ViewModelModifiable model, JsonElement params, String name);
+ public ModelComponent create(LogicModelModifiable model, JsonElement params, String name);
}
}
\ No newline at end of file
import com.google.gson.JsonElement;
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.wires.ModelWire;
// convenience methods
/**
- * Like {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams)}, but first reading the
* {@link LegacySubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath) throws IOException
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, LegacySubmodelComponentParams.class));
}
/**
- * Like {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, JsonElement)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, JsonElement)}, but first reading the
* {@link LegacySubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String idForSerializingOverride,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String idForSerializingOverride,
JsonElement paramsForSerializingOverride) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, LegacySubmodelComponentParams.class), idForSerializingOverride,
}
/**
- * Like {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String)}, but first reading the
* {@link LegacySubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String name) throws IOException
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String name) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, LegacySubmodelComponentParams.class), name);
}
/**
- * Like {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)}, but first reading the
* {@link LegacySubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String name, String idForSerializingOverride,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String name, String idForSerializingOverride,
JsonElement paramsForSerializingOverride) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, LegacySubmodelComponentParams.class), name, idForSerializingOverride,
}
/**
- * {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} with no
+ * {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} with no
* <code>idForSerializingOverride</code> set and using the default name.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, LegacySubmodelComponentParams params)
+ public static SubmodelComponent deserialize(LogicModelModifiable model, LegacySubmodelComponentParams params)
{
return deserialize(model, params, null, null, null);
}
/**
- * {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} using the default name.
+ * {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} using the default name.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, LegacySubmodelComponentParams params,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, LegacySubmodelComponentParams params,
String idForSerializingOverride, JsonElement paramsForSerializingOverride)
{
return deserialize(model, params, null, idForSerializingOverride, paramsForSerializingOverride);
}
/**
- * {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} with no
+ * {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement)} with no
* <code>idForSerializingOverride</code> set.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, LegacySubmodelComponentParams params, String name)
+ public static SubmodelComponent deserialize(LogicModelModifiable model, LegacySubmodelComponentParams params, String name)
{
return deserialize(model, params, name, null, null);
}
* @author Daniel Kirschten
*/
@SuppressWarnings("unused") // for ModelWire being created
- public static SubmodelComponent deserialize(ViewModelModifiable model, LegacySubmodelComponentParams params, String name,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, LegacySubmodelComponentParams params, String name,
String idForSerializingOverride, JsonElement paramsForSerializingOverride)
{
DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model, name, idForSerializingOverride,
comp.addSubmodelInterface(new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, PinUsage.TRISTATE, iPinParams.location.x,
iPinParams.location.y));
LegacySubmodelParameters submodelParams = params.submodel;
- ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
+ LogicModelModifiable submodelModifiable = comp.getSubmodelModifiable();
Map<String, ModelComponent> componentsByName = submodelModifiable.getComponentsByName();
ModelComponent[] components = new ModelComponent[submodelParams.subComps.length];
for (int i = 0; i < components.length; i++)
* Subcomponents are serialized in the following way: <br>
* If a subcomponent is a <code>SubmodelComponent</code> which has been deserialized, and it has an
* {@link DeserializedSubmodelComponent#idForSerializingOverride idForSerializingOverride} set (e.g. non-null; see
- * {@link #deserialize(ViewModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement) deserialize(...)}), this ID and
+ * {@link #deserialize(LogicModelModifiable, LegacySubmodelComponentParams, String, String, JsonElement) deserialize(...)}), this ID and
* the component's {@link DeserializedSubmodelComponent#paramsForSerializingOverride paramsForSerializingOverride} are written.<br>
* If this case doesn't apply (e.g. if the subcomponent is not a <code>SubmodelComponent</code>; or it is a
* <code>SubmodelComponent</code>, but hasn't been deserialized; or it has no
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import com.google.gson.JsonElement;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.util.Version;
+
+public class LogicModelParams extends SerializablePojo
+{
+ public ComponentParams[] components;
+ public WireParams[] wires;
+
+ public LogicModelParams(Version version)
+ {
+ super(version);
+ }
+
+ public static class ComponentParams
+ {
+ public String id;
+ public String name;
+ public Point pos;
+ public JsonElement params;
+ }
+
+ public static class WireParams
+ {
+ public PinParams pin1, pin2;
+ public String name;
+ public Point[] path;
+
+ public static class PinParams
+ {
+ public String compName;
+ public String pinName;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import com.google.gson.JsonElement;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.LogicModel;
+import net.mograsim.logic.model.model.LogicModelModifiable;
+import net.mograsim.logic.model.model.components.ModelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.ModelWire;
+import net.mograsim.logic.model.serializing.LogicModelParams.ComponentParams;
+import net.mograsim.logic.model.serializing.LogicModelParams.WireParams;
+import net.mograsim.logic.model.serializing.LogicModelParams.WireParams.PinParams;
+import net.mograsim.logic.model.util.JsonHandler;
+import net.mograsim.logic.model.util.Version;
+
+public class LogicModelSerializer
+{
+ public static final Version CURRENT_JSON_VERSION = Version.parseSemver("0.1.1");
+
+ // convenience methods
+ /**
+ * Like {@link #deserialize(LogicModelParams)}, but first reading the {@link LogicModelParams} from the given file path.
+ *
+ * @author Daniel Kirschten
+ */
+ public static LogicModelModifiable deserialize(String sourcePath) throws IOException
+ {
+ return deserialize(JsonHandler.readJson(sourcePath, LogicModelParams.class));
+ }
+
+ /**
+ * Like {@link #deserialize(LogicModelModifiable, LogicModelParams)}, but first reading the {@link LogicModelParams} from the given file
+ * path.
+ *
+ * @author Daniel Kirschten
+ */
+ public static void deserialize(LogicModelModifiable model, String sourcePath) throws IOException
+ {
+ deserialize(model, JsonHandler.readJson(sourcePath, LogicModelParams.class));
+ }
+
+ /**
+ * Like {@link #deserialize(LogicModelModifiable, LogicModelParams)}, but using a newly created {@link LogicModelModifiable}.
+ *
+ * @author Daniel Kirschten
+ */
+ public static LogicModelModifiable deserialize(LogicModelParams params)
+ {
+ LogicModelModifiable model = new LogicModelModifiable();
+ deserialize(model, params);
+ return model;
+ }
+
+ /**
+ * Like {@link #serialize(LogicModel)}, but instead of returning the generated {@link LogicModelParams} they are written to a file at the
+ * given path.
+ *
+ * @author Daniel Kirschten
+ */
+ public static void serialize(LogicModel model, String targetPath) throws IOException
+ {
+ JsonHandler.writeJson(serialize(model), targetPath);
+ }
+
+ /**
+ * Like {@link #serialize(LogicModel, IdentifierGetter)}, but instead of returning the generated {@link LogicModelParams} they are written
+ * to a file at the given path.
+ *
+ * @author Daniel Kirschten
+ */
+ public static void serialize(LogicModel model, IdentifyParams idParams, String targetPath) throws IOException
+ {
+ JsonHandler.writeJson(serialize(model, idParams), targetPath);
+ }
+
+ /**
+ * {@link #serialize(LogicModel, IdentifierGetter)} using a default {@link IdentifierGetter} (see <code>IdentifierGetter</code>'s
+ * {@link IdentifierGetter#IdentifierGetter() default constructor})
+ *
+ * @author Daniel Kirschten
+ */
+ public static LogicModelParams serialize(LogicModel model)
+ {
+ return serialize(model, new IdentifyParams());
+ }
+
+ // "core" methods
+ /**
+ * Deserializes components and wires from the specified {@link LogicModelParams} and adds them to the given {@link LogicModelModifiable}.
+ *
+ * @author Fabian Stemmler
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings("unused") // for ModelWire being created
+ public static void deserialize(LogicModelModifiable model, LogicModelParams params)
+ {
+ Map<String, ModelComponent> componentsByName = model.getComponentsByName();
+ ModelComponent[] components = new ModelComponent[params.components.length];
+ for (int i = 0; i < components.length; i++)
+ {
+ ComponentParams compParams = params.components[i];
+ components[i] = IndirectModelComponentCreator.createComponent(model, compParams.id, compParams.params, compParams.name);
+ components[i].moveTo(compParams.pos.x, compParams.pos.y);
+ }
+
+ for (int i = 0; i < params.wires.length; i++)
+ {
+ WireParams wire = params.wires[i];
+ new ModelWire(model, wire.name, componentsByName.get(wire.pin1.compName).getPin(wire.pin1.pinName),
+ componentsByName.get(wire.pin2.compName).getPin(wire.pin2.pinName), wire.path);
+ }
+ }
+
+ /**
+ * Returns {@link LogicModelModifiable}, which describe the components and wires in the given {@link LogicModel}. <br>
+ * Components are serialized in the following way: <br>
+ * If a component is a <code>SubmodelComponent</code> which has been deserialized, and it has an
+ * {@link DeserializedSubmodelComponent#idForSerializingOverride idForSerializingOverride} set (e.g. non-null; see
+ * {@link SubmodelComponentSerializer#deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)
+ * SubmodelComponentSerializer.deserialize(...)}), this ID and the component's
+ * {@link DeserializedSubmodelComponent#paramsForSerializingOverride paramsForSerializingOverride} are written.<br>
+ * If this case doesn't apply (e.g. if the component is not a <code>SubmodelComponent</code>; or it is a <code>SubmodelComponent</code>,
+ * but hasn't been deserialized; or it has no {@link DeserializedSubmodelComponent#idForSerializingOverride idForSerializingOverride}
+ * set), the ID defined by <code>idGetter</code> and the params obtained by {@link ModelComponent#getParamsForSerializing() getParams()}
+ * are written.
+ *
+ * @author Fabian Stemmler
+ * @author Daniel Kirschten
+ */
+ public static LogicModelParams serialize(LogicModel model, IdentifyParams idParams)
+ {
+ LogicModelParams modelParams = new LogicModelParams(CURRENT_JSON_VERSION);
+
+ Map<String, ModelComponent> components = new HashMap<>(model.getComponentsByName());
+ components.remove(SubmodelComponent.SUBMODEL_INTERFACE_NAME);
+ Set<ComponentParams> componentsParams = new HashSet<>();
+ for (ModelComponent component : components.values())
+ {
+ ComponentParams compParams = new ComponentParams();
+ componentsParams.add(compParams);
+ compParams.pos = new Point(component.getPosX(), component.getPosY());
+ DeserializedSubmodelComponent innerCompCasted;
+ if (component instanceof DeserializedSubmodelComponent
+ && (innerCompCasted = (DeserializedSubmodelComponent) component).idForSerializingOverride != null)
+ {
+ compParams.id = innerCompCasted.idForSerializingOverride;
+ compParams.params = innerCompCasted.paramsForSerializingOverride;
+ } else
+ {
+ compParams.id = component.getIDForSerializing(idParams);
+ compParams.params = component.getParamsForSerializingJSON(idParams);
+ }
+ compParams.name = component.name;
+ }
+ modelParams.components = componentsParams.toArray(ComponentParams[]::new);
+ Arrays.sort(modelParams.components, Comparator.comparing(c -> c.name));
+
+ Collection<ModelWire> wires = model.getWiresByName().values();
+ Set<WireParams> wiresParams = new HashSet<>();
+ for (ModelWire innerWire : wires)
+ {
+ WireParams innerWireParams = new WireParams();
+ wiresParams.add(innerWireParams);
+ PinParams pin1Params = new PinParams(), pin2Params = new PinParams();
+
+ pin1Params.pinName = innerWire.getPin1().name;
+ pin1Params.compName = innerWire.getPin1().component.name;
+ pin2Params.pinName = innerWire.getPin2().name;
+ pin2Params.compName = innerWire.getPin2().component.name;
+ innerWireParams.name = innerWire.name;
+ innerWireParams.pin1 = pin1Params;
+ innerWireParams.pin2 = pin2Params;
+ innerWireParams.path = innerWire.getPath();
+ }
+ modelParams.wires = wiresParams.toArray(WireParams[]::new);
+ Arrays.sort(modelParams.wires, Comparator.comparing(c -> c.name));
+
+ return modelParams;
+ }
+}
\ No newline at end of file
public double width, height;
public InterfacePinParams[] interfacePins;
public double innerScale;
- public ViewModelParams submodel;
+ public LogicModelParams submodel;
// functionality that needs to be expressed in Java code
public String symbolRendererSnippetID;
import com.google.gson.JsonElement;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
import net.mograsim.logic.model.model.wires.MovablePin;
import net.mograsim.logic.model.model.wires.Pin;
// convenience methods
/**
- * Like {@link #deserialize(ViewModelModifiable, SubmodelComponentParams)}, but first reading the {@link SubmodelComponentParams} from
+ * Like {@link #deserialize(LogicModelModifiable, SubmodelComponentParams)}, but first reading the {@link SubmodelComponentParams} from
* the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath) throws IOException
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, SubmodelComponentParams.class));
}
/**
- * Like {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String, JsonElement)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String, JsonElement)}, but first reading the
* {@link SubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String idForSerializingOverride,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String idForSerializingOverride,
JsonElement paramsForSerializingOverride) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, SubmodelComponentParams.class), idForSerializingOverride,
}
/**
- * Like {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String)}, but first reading the
* {@link SubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String name) throws IOException
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String name) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, SubmodelComponentParams.class), name);
}
/**
- * Like {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)}, but first reading the
+ * Like {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)}, but first reading the
* {@link SubmodelComponentParams} from the given file path.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, String sourcePath, String name, String idForSerializingOverride,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, String sourcePath, String name, String idForSerializingOverride,
JsonElement paramsForSerializingOverride) throws IOException
{
return deserialize(model, JsonHandler.readJson(sourcePath, SubmodelComponentParams.class), name, idForSerializingOverride,
}
/**
- * {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)} with no
+ * {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)} with no
* <code>idForSerializingOverride</code> set and using the default name.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, SubmodelComponentParams params)
+ public static SubmodelComponent deserialize(LogicModelModifiable model, SubmodelComponentParams params)
{
return deserialize(model, params, null, null, null);
}
/**
- * {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)} using the default name.
+ * {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)} using the default name.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, SubmodelComponentParams params, String idForSerializingOverride,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, SubmodelComponentParams params, String idForSerializingOverride,
JsonElement paramsForSerializingOverride)
{
return deserialize(model, params, null, idForSerializingOverride, paramsForSerializingOverride);
}
/**
- * {@link #deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)} with no
+ * {@link #deserialize(LogicModelModifiable, SubmodelComponentParams, String, String, JsonElement)} with no
* <code>idForSerializingOverride</code> set.
*
* @author Daniel Kirschten
*/
- public static SubmodelComponent deserialize(ViewModelModifiable model, SubmodelComponentParams params, String name)
+ public static SubmodelComponent deserialize(LogicModelModifiable model, SubmodelComponentParams params, String name)
{
return deserialize(model, params, name, null, null);
}
* @author Daniel Kirschten
*/
@SuppressWarnings("unused") // for ModelWire being created
- public static SubmodelComponent deserialize(ViewModelModifiable model, SubmodelComponentParams params, String name,
+ public static SubmodelComponent deserialize(LogicModelModifiable model, SubmodelComponentParams params, String name,
String idForSerializingOverride, JsonElement paramsForSerializingOverride)
{
Version version = params.version;
// TRISTATE because we don't have a better choice
comp.addSubmodelInterface(new MovablePin(comp, iPinParams.name, iPinParams.logicWidth,
hasUsageSerialized ? iPinParams.usage : PinUsage.TRISTATE, iPinParams.location.x, iPinParams.location.y));
- ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
- ViewModelSerializer.deserialize(comp.getSubmodelModifiable(), params.submodel);
+ LogicModelModifiable submodelModifiable = comp.getSubmodelModifiable();
+ LogicModelSerializer.deserialize(comp.getSubmodelModifiable(), params.submodel);
comp.setSymbolRenderer(SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getSnippetSupplier(params.symbolRendererSnippetID)
.create(comp, params.symbolRendererParams));
comp.setOutlineRenderer(SubmodelComponentSnippetSuppliers.outlineRendererSupplier
/**
* Returns {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}. <br>
- * See {@link ViewModelSerializer#serialize(net.mograsim.logic.model.model.ViewModel, IdentifierGetter)
- * ViewModelSerializer.serialize(...)} for how subcomponents are serialized.<br>
+ * See {@link LogicModelSerializer#serialize(net.mograsim.logic.model.model.LogicModel, IdentifierGetter)
+ * LogicModelSerializer.serialize(...)} for how subcomponents are serialized.<br>
* CodeSnippets are serialized using the ID defined by <code>idGetter</code> and the params obtained by the respective
* <coce>getParamsForSerializing</code> methods ({@link Renderer#getParamsForSerializing()}).
*
{
SubmodelComponentParams params = new SubmodelComponentParams(JSON_VERSION_CURRENT_SERIALIZING);
params.innerScale = comp.getSubmodelScale();
- params.submodel = ViewModelSerializer.serialize(comp.submodel, idParams);
+ params.submodel = LogicModelSerializer.serialize(comp.submodel, idParams);
params.width = comp.getWidth();
params.height = comp.getHeight();
+++ /dev/null
-package net.mograsim.logic.model.serializing;
-
-import com.google.gson.JsonElement;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.model.util.Version;
-
-public class ViewModelParams extends SerializablePojo
-{
- public ComponentParams[] components;
- public WireParams[] wires;
-
- public ViewModelParams(Version version)
- {
- super(version);
- }
-
- public static class ComponentParams
- {
- public String id;
- public String name;
- public Point pos;
- public JsonElement params;
- }
-
- public static class WireParams
- {
- public PinParams pin1, pin2;
- public String name;
- public Point[] path;
-
- public static class PinParams
- {
- public String compName;
- public String pinName;
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.model.serializing;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import com.google.gson.JsonElement;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.model.model.ViewModel;
-import net.mograsim.logic.model.model.ViewModelModifiable;
-import net.mograsim.logic.model.model.components.ModelComponent;
-import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.model.model.wires.ModelWire;
-import net.mograsim.logic.model.serializing.ViewModelParams.ComponentParams;
-import net.mograsim.logic.model.serializing.ViewModelParams.WireParams;
-import net.mograsim.logic.model.serializing.ViewModelParams.WireParams.PinParams;
-import net.mograsim.logic.model.util.JsonHandler;
-import net.mograsim.logic.model.util.Version;
-
-public class ViewModelSerializer
-{
- public static final Version CURRENT_JSON_VERSION = Version.parseSemver("0.1.1");
-
- // convenience methods
- /**
- * Like {@link #deserialize(ViewModelParams)}, but first reading the {@link ViewModelParams} from the given file path.
- *
- * @author Daniel Kirschten
- */
- public static ViewModelModifiable deserialize(String sourcePath) throws IOException
- {
- return deserialize(JsonHandler.readJson(sourcePath, ViewModelParams.class));
- }
-
- /**
- * Like {@link #deserialize(ViewModelModifiable, ViewModelParams)}, but first reading the {@link ViewModelParams} from the given file
- * path.
- *
- * @author Daniel Kirschten
- */
- public static void deserialize(ViewModelModifiable model, String sourcePath) throws IOException
- {
- deserialize(model, JsonHandler.readJson(sourcePath, ViewModelParams.class));
- }
-
- /**
- * Like {@link #deserialize(ViewModelModifiable, ViewModelParams)}, but using a newly created {@link ViewModelModifiable}.
- *
- * @author Daniel Kirschten
- */
- public static ViewModelModifiable deserialize(ViewModelParams params)
- {
- ViewModelModifiable model = new ViewModelModifiable();
- deserialize(model, params);
- return model;
- }
-
- /**
- * Like {@link #serialize(ViewModel)}, but instead of returning the generated {@link ViewModelParams} they are written to a file at the
- * given path.
- *
- * @author Daniel Kirschten
- */
- public static void serialize(ViewModel model, String targetPath) throws IOException
- {
- JsonHandler.writeJson(serialize(model), targetPath);
- }
-
- /**
- * Like {@link #serialize(ViewModel, IdentifierGetter)}, but instead of returning the generated {@link ViewModelParams} they are written
- * to a file at the given path.
- *
- * @author Daniel Kirschten
- */
- public static void serialize(ViewModel model, IdentifyParams idParams, String targetPath) throws IOException
- {
- JsonHandler.writeJson(serialize(model, idParams), targetPath);
- }
-
- /**
- * {@link #serialize(ViewModel, IdentifierGetter)} using a default {@link IdentifierGetter} (see <code>IdentifierGetter</code>'s
- * {@link IdentifierGetter#IdentifierGetter() default constructor})
- *
- * @author Daniel Kirschten
- */
- public static ViewModelParams serialize(ViewModel model)
- {
- return serialize(model, new IdentifyParams());
- }
-
- // "core" methods
- /**
- * Deserializes components and wires from the specified {@link ViewModelParams} and adds them to the given {@link ViewModelModifiable}.
- *
- * @author Fabian Stemmler
- * @author Daniel Kirschten
- */
- @SuppressWarnings("unused") // for ModelWire being created
- public static void deserialize(ViewModelModifiable model, ViewModelParams params)
- {
- Map<String, ModelComponent> componentsByName = model.getComponentsByName();
- ModelComponent[] components = new ModelComponent[params.components.length];
- for (int i = 0; i < components.length; i++)
- {
- ComponentParams compParams = params.components[i];
- components[i] = IndirectModelComponentCreator.createComponent(model, compParams.id, compParams.params, compParams.name);
- components[i].moveTo(compParams.pos.x, compParams.pos.y);
- }
-
- for (int i = 0; i < params.wires.length; i++)
- {
- WireParams wire = params.wires[i];
- new ModelWire(model, wire.name, componentsByName.get(wire.pin1.compName).getPin(wire.pin1.pinName),
- componentsByName.get(wire.pin2.compName).getPin(wire.pin2.pinName), wire.path);
- }
- }
-
- /**
- * Returns {@link ViewModelModifiable}, which describe the components and wires in the given {@link ViewModel}. <br>
- * Components are serialized in the following way: <br>
- * If a component is a <code>SubmodelComponent</code> which has been deserialized, and it has an
- * {@link DeserializedSubmodelComponent#idForSerializingOverride idForSerializingOverride} set (e.g. non-null; see
- * {@link SubmodelComponentSerializer#deserialize(ViewModelModifiable, SubmodelComponentParams, String, String, JsonElement)
- * SubmodelComponentSerializer.deserialize(...)}), this ID and the component's
- * {@link DeserializedSubmodelComponent#paramsForSerializingOverride paramsForSerializingOverride} are written.<br>
- * If this case doesn't apply (e.g. if the component is not a <code>SubmodelComponent</code>; or it is a <code>SubmodelComponent</code>,
- * but hasn't been deserialized; or it has no {@link DeserializedSubmodelComponent#idForSerializingOverride idForSerializingOverride}
- * set), the ID defined by <code>idGetter</code> and the params obtained by {@link ModelComponent#getParamsForSerializing() getParams()}
- * are written.
- *
- * @author Fabian Stemmler
- * @author Daniel Kirschten
- */
- public static ViewModelParams serialize(ViewModel model, IdentifyParams idParams)
- {
- ViewModelParams modelParams = new ViewModelParams(CURRENT_JSON_VERSION);
-
- Map<String, ModelComponent> components = new HashMap<>(model.getComponentsByName());
- components.remove(SubmodelComponent.SUBMODEL_INTERFACE_NAME);
- Set<ComponentParams> componentsParams = new HashSet<>();
- for (ModelComponent component : components.values())
- {
- ComponentParams compParams = new ComponentParams();
- componentsParams.add(compParams);
- compParams.pos = new Point(component.getPosX(), component.getPosY());
- DeserializedSubmodelComponent innerCompCasted;
- if (component instanceof DeserializedSubmodelComponent
- && (innerCompCasted = (DeserializedSubmodelComponent) component).idForSerializingOverride != null)
- {
- compParams.id = innerCompCasted.idForSerializingOverride;
- compParams.params = innerCompCasted.paramsForSerializingOverride;
- } else
- {
- compParams.id = component.getIDForSerializing(idParams);
- compParams.params = component.getParamsForSerializingJSON(idParams);
- }
- compParams.name = component.name;
- }
- modelParams.components = componentsParams.toArray(ComponentParams[]::new);
- Arrays.sort(modelParams.components, Comparator.comparing(c -> c.name));
-
- Collection<ModelWire> wires = model.getWiresByName().values();
- Set<WireParams> wiresParams = new HashSet<>();
- for (ModelWire innerWire : wires)
- {
- WireParams innerWireParams = new WireParams();
- wiresParams.add(innerWireParams);
- PinParams pin1Params = new PinParams(), pin2Params = new PinParams();
-
- pin1Params.pinName = innerWire.getPin1().name;
- pin1Params.compName = innerWire.getPin1().component.name;
- pin2Params.pinName = innerWire.getPin2().name;
- pin2Params.compName = innerWire.getPin2().component.name;
- innerWireParams.name = innerWire.name;
- innerWireParams.pin1 = pin1Params;
- innerWireParams.pin2 = pin2Params;
- innerWireParams.path = innerWire.getPath();
- }
- modelParams.wires = wiresParams.toArray(WireParams[]::new);
- Arrays.sort(modelParams.wires, Comparator.comparing(c -> c.name));
-
- return modelParams;
- }
-}
\ No newline at end of file
package net.mograsim.logic.model.util;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.wires.ModelWire;
import net.mograsim.logic.model.model.wires.Pin;
public class ModellingTool
{
- private ViewModelModifiable model;
+ private LogicModelModifiable model;
- ModellingTool(ViewModelModifiable model)
+ ModellingTool(LogicModelModifiable model)
{
this.model = model;
}
return new ModelWire(model, name, a, b);
}
- public static ModellingTool createFor(ViewModelModifiable model)
+ public static ModellingTool createFor(LogicModelModifiable model)
{
return new ModellingTool(model);
}
import net.mograsim.logic.core.components.CoreClock;
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.LogicModel;
public interface Machine {
MachineDefinition getDefinition();
void reset();
- ViewModel getModel();
+ LogicModel getModel();
CoreClock getClock();
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.ModelComponent;
import net.mograsim.logic.model.model.components.atomic.ModelAndGate;
import net.mograsim.logic.model.model.wires.Pin;
private Renderer symbolRenderer;
private Renderer outlineRenderer;
- public ModelMemoryWA(ViewModelModifiable model, MainMemoryDefinition definition, String name)
+ public ModelMemoryWA(LogicModelModifiable model, MainMemoryDefinition definition, String name)
{
super(model, name);
this.definition = definition;
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.model.LogicExecuter;
import net.mograsim.logic.model.LogicUICanvas;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch;
import net.mograsim.logic.model.model.components.atomic.ModelNotGate;
import net.mograsim.logic.model.model.components.atomic.ModelOrGate;
// TODO this will change the global preferences; so if another LogicUICanvas redraws, it will use the "new" colors too.
Preferences.setPreferences(currentThemePreferences);
- ViewModelModifiable model = new ViewModelModifiable();
+ LogicModelModifiable model = new LogicModelModifiable();
CoreModelParameters params = new CoreModelParameters();
params.gateProcessTime = 50;
params.wireTravelTime = 10;