From: Fabian Stemmler Date: Wed, 29 May 2019 10:42:50 +0000 (+0200) Subject: Merge branch 'development' of X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=50082bc2126d3f408acbdf4103bb4fdf29ac1d4f;p=Mograsim.git Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim-2019 into development # Conflicts: # LogicUI/oldsrc/RSLatchGUIExample.java # LogicUI/src/era/mi/gui/LogicUIStandalone.java # LogicUI/src/era/mi/gui/components/GUIManualSwitch.java # SampleERCP/src/sampleercp/parts/LogicUIPart.java --- 50082bc2126d3f408acbdf4103bb4fdf29ac1d4f diff --cc LogicUI/oldsrc/RSLatchGUIExample.java index 00000000,0fb1886a..413525bf mode 000000,100644..100644 --- a/LogicUI/oldsrc/RSLatchGUIExample.java +++ b/LogicUI/oldsrc/RSLatchGUIExample.java @@@ -1,0 -1,61 +1,62 @@@ -package era.mi.gui.examples; - -import era.mi.gui.LogicUICanvas; -import era.mi.gui.LogicUIStandalone; -import era.mi.gui.components.GUIManualSwitch; -import era.mi.gui.components.GUINotGate; -import era.mi.gui.components.GUIOrGateOld; -import era.mi.gui.wires.WireConnectionPoint; -import era.mi.logic.timeline.Timeline; -import era.mi.logic.wires.Wire; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; - -public class RSLatchGUIExample -{ - private static final int WIRE_DELAY = 10; - private static final int OR_DELAY = 50; - private static final int NOT_DELAY = 50; - - public static void main(String[] args) - { - Timeline t = new Timeline(11); - LogicUIStandalone ui = new LogicUIStandalone(t); - addComponentsAndWires(ui.getLogicUICanvas(), t); - ui.run(); - } - - public static void addComponentsAndWires(LogicUICanvas ui, Timeline t) - { - Wire r = new Wire(t, 1, WIRE_DELAY); - Wire s = new Wire(t, 1, WIRE_DELAY); - Wire t2 = new Wire(t, 1, WIRE_DELAY); - Wire t1 = new Wire(t, 1, WIRE_DELAY); - Wire q = new Wire(t, 1, WIRE_DELAY); - Wire nq = new Wire(t, 1, WIRE_DELAY); - - GUIManualSwitch rIn = ui.addComponent(new GUIManualSwitch(t, r.createReadWriteEnd()), 100, 100); - GUIManualSwitch sIn = ui.addComponent(new GUIManualSwitch(t, s.createReadWriteEnd()), 100, 200); - GUIOrGateOld or1 = ui.addComponent(new GUIOrGateOld(t, OR_DELAY, t1.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()), - 160, 102.5); - GUIOrGateOld or2 = ui.addComponent(new GUIOrGateOld(t, OR_DELAY, t2.createReadWriteEnd(), q.createReadOnlyEnd(), s.createReadOnlyEnd()), - 160, 192.5); - GUINotGate not1 = ui.addComponent(new GUINotGate(t, NOT_DELAY, t1.createReadOnlyEnd(), q.createReadWriteEnd()), 200, 107.5); - GUINotGate not2 = ui.addComponent(new GUINotGate(t, NOT_DELAY, t2.createReadOnlyEnd(), nq.createReadWriteEnd()), 200, 197.5); - - WireConnectionPoint p1 = ui.addComponent(new WireConnectionPoint(q, 3), 250, 112.5); - WireConnectionPoint p2 = ui.addComponent(new WireConnectionPoint(nq, 3), 250, 202.5); - WireConnectionPoint o1 = ui.addComponent(new WireConnectionPoint(q, 1), 270, 112.5); - WireConnectionPoint o2 = ui.addComponent(new WireConnectionPoint(nq, 1), 270, 202.5); - - ui.addWire(rIn, 0, or1, 0); - ui.addWire(sIn, 0, or2, 1); - ui.addWire(or1, 2, not1, 0); - ui.addWire(or2, 2, not2, 0); - ui.addWire(not1, 1, p1, 0); - ui.addWire(not2, 1, p2, 0); - ui.addWire(p1, 1, or2, 0, new Point(250, 130), new Point(140, 185), new Point(140, 197.5)); - ui.addWire(p2, 1, or1, 1, new Point(250, 185), new Point(140, 130), new Point(140, 117.5)); - ui.addWire(p1, 2, o1, 0); - ui.addWire(p2, 2, o2, 0); - } ++package era.mi.gui.examples; ++ ++import era.mi.gui.LogicUICanvas; ++import era.mi.gui.LogicUIStandalone; ++import era.mi.gui.components.GUIManualSwitch; ++import era.mi.gui.components.GUINotGate; ++import era.mi.gui.components.GUIOrGateOld; ++import era.mi.gui.wires.WireConnectionPoint; ++import era.mi.logic.timeline.Timeline; ++import era.mi.logic.wires.Wire; ++import net.haspamelodica.swt.helper.swtobjectwrappers.Point; ++ ++public class RSLatchGUIExample ++{ ++ private static final int WIRE_DELAY = 10; ++ private static final int OR_DELAY = 50; ++ private static final int NOT_DELAY = 50; ++ ++ public static void main(String[] args) ++ { ++ Timeline t = new Timeline(11); ++ t.setTimeFunction(() -> System.currentTimeMillis()); // real time simulation ++ LogicUIStandalone ui = new LogicUIStandalone(t); ++ addComponentsAndWires(ui.getLogicUICanvas(), t); ++ ui.run(); ++ } ++ ++ public static void addComponentsAndWires(LogicUICanvas ui, Timeline t) ++ { ++ Wire r = new Wire(t, 1, WIRE_DELAY); ++ Wire s = new Wire(t, 1, WIRE_DELAY); ++ Wire t2 = new Wire(t, 1, WIRE_DELAY); ++ Wire t1 = new Wire(t, 1, WIRE_DELAY); ++ Wire q = new Wire(t, 1, WIRE_DELAY); ++ Wire nq = new Wire(t, 1, WIRE_DELAY); ++ ++ GUIManualSwitch rIn = ui.addComponent(new GUIManualSwitch(t, r.createReadWriteEnd()), 100, 100); ++ GUIManualSwitch sIn = ui.addComponent(new GUIManualSwitch(t, s.createReadWriteEnd()), 100, 200); ++ GUIOrGateOld or1 = ui.addComponent(new GUIOrGateOld(t, OR_DELAY, t1.createReadWriteEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd()), ++ 160, 102.5); ++ GUIOrGateOld or2 = ui.addComponent(new GUIOrGateOld(t, OR_DELAY, t2.createReadWriteEnd(), q.createReadOnlyEnd(), s.createReadOnlyEnd()), ++ 160, 192.5); ++ GUINotGate not1 = ui.addComponent(new GUINotGate(t, NOT_DELAY, t1.createReadOnlyEnd(), q.createReadWriteEnd()), 200, 107.5); ++ GUINotGate not2 = ui.addComponent(new GUINotGate(t, NOT_DELAY, t2.createReadOnlyEnd(), nq.createReadWriteEnd()), 200, 197.5); ++ ++ WireConnectionPoint p1 = ui.addComponent(new WireConnectionPoint(q, 3), 250, 112.5); ++ WireConnectionPoint p2 = ui.addComponent(new WireConnectionPoint(nq, 3), 250, 202.5); ++ WireConnectionPoint o1 = ui.addComponent(new WireConnectionPoint(q, 1), 270, 112.5); ++ WireConnectionPoint o2 = ui.addComponent(new WireConnectionPoint(nq, 1), 270, 202.5); ++ ++ ui.addWire(rIn, 0, or1, 0); ++ ui.addWire(sIn, 0, or2, 1); ++ ui.addWire(or1, 2, not1, 0); ++ ui.addWire(or2, 2, not2, 0); ++ ui.addWire(not1, 1, p1, 0); ++ ui.addWire(not2, 1, p2, 0); ++ ui.addWire(p1, 1, or2, 0, new Point(250, 130), new Point(140, 185), new Point(140, 197.5)); ++ ui.addWire(p2, 1, or1, 1, new Point(250, 185), new Point(140, 130), new Point(140, 117.5)); ++ ui.addWire(p1, 2, o1, 0); ++ ui.addWire(p2, 2, o2, 0); ++ } + } diff --cc LogicUI/src/era/mi/gui/LogicUIStandalone.java index db498ace,3e29a6e4..8bbfb1c5 --- a/LogicUI/src/era/mi/gui/LogicUIStandalone.java +++ b/LogicUI/src/era/mi/gui/LogicUIStandalone.java @@@ -49,33 -50,33 +50,34 @@@ public class LogicUIStandalon public void run() { AtomicBoolean running = new AtomicBoolean(true); - Thread simulationThread = new Thread(() -> - { - while (running.get()) - { - // always execute to keep timeline from "hanging behind" for too long - timeline.executeUntil(timeline.laterThan(System.currentTimeMillis()), System.currentTimeMillis() + 10); - long sleepTime; - if (timeline.hasNext()) - sleepTime = timeline.nextEventTime() - System.currentTimeMillis(); - else - sleepTime = 10; - try - { - if (sleepTime > 0) - Thread.sleep(sleepTime); - } - catch (InterruptedException e) - { - } // it is normal execution flow to be interrupted - } - }); - simulationThread.start(); - timeline.addEventAddedListener(event -> - { - if (event.getTiming() <= System.currentTimeMillis()) - simulationThread.interrupt(); - }); + // Thread simulationThread = new Thread(() -> + // { + // while (running.get()) + // { + // // always execute to keep timeline from "hanging behind" for too long ++// timeline.executeUntil(timeline.laterThan(System.currentTimeMillis()), System.currentTimeMillis() + 10); + // model.timeline.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10); + // long sleepTime; + // if (model.timeline.hasNext()) + // sleepTime = model.timeline.nextEventTime() - System.currentTimeMillis(); + // else + // sleepTime = 10; + // try + // { + // if (sleepTime > 0) + // Thread.sleep(sleepTime); + // } + // catch (InterruptedException e) + // { + // } // it is normal execution flow to be interrupted + // } + // }); + // simulationThread.start(); + // model.timeline.addEventAddedListener(event -> + // { + // if (event.getTiming() <= System.currentTimeMillis()) + // simulationThread.interrupt(); + // }); shell.open(); while (!shell.isDisposed()) diff --cc LogicUI/src/era/mi/gui/components/GUIManualSwitch.java index ff674c5c,00000000..7bec909e mode 100644,000000..100644 --- a/LogicUI/src/era/mi/gui/components/GUIManualSwitch.java +++ b/LogicUI/src/era/mi/gui/components/GUIManualSwitch.java @@@ -1,96 -1,0 +1,6 @@@ +package era.mi.gui.components; + - import java.util.ArrayList; - import java.util.Collections; - import java.util.HashMap; - import java.util.List; - import java.util.Map; - - import era.mi.logic.components.ManualSwitch; - import era.mi.logic.timeline.Timeline; - import era.mi.logic.types.Bit; - import era.mi.logic.wires.Wire.ReadEnd; - import era.mi.logic.wires.Wire.ReadWriteEnd; - import net.haspamelodica.swt.helper.gcs.GeneralGC; - import net.haspamelodica.swt.helper.swtobjectwrappers.Font; - import net.haspamelodica.swt.helper.swtobjectwrappers.Point; - import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; - - public class GUIManualSwitch extends ManualSwitch implements BasicGUIComponent ++public class GUIManualSwitch +{ - private static final Map bitNames; - static - { - Map bitNamesModifiable = new HashMap<>(); - bitNamesModifiable.put(Bit.ONE, "1"); - bitNamesModifiable.put(Bit.ZERO, "0"); - bitNamesModifiable.put(Bit.Z, "Z"); - bitNamesModifiable.put(Bit.U, "U"); - bitNamesModifiable.put(Bit.X, "X"); - bitNames = Collections.unmodifiableMap(bitNamesModifiable); - } - - private final ReadEnd we; - private final List connectedWireEnds; - private final List wireEndConnectionPoints; - - public GUIManualSwitch(Timeline timeline, ReadWriteEnd output) - { - super(timeline, output); - - this.we = output; - - List connectedWireEndsModifiable = new ArrayList<>(); - List wireEndConnectionPointsModifiable = new ArrayList<>(); - - connectedWireEndsModifiable.add(output); - wireEndConnectionPointsModifiable.add(new Point(20, 7.5)); - - this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable); - this.wireEndConnectionPoints = Collections.unmodifiableList(wireEndConnectionPointsModifiable); - } - - @Override - public Rectangle getBounds() - { - return new Rectangle(0, 0, 20, 15); - } - - @Override - public void render(GeneralGC gc) - { - gc.drawRectangle(0, 0, 20, 15); - String label = bitNames.get(we.getValue()); - Font oldFont = gc.getFont(); - Font labelFont = new Font(oldFont.getName(), 6, oldFont.getStyle()); - gc.setFont(labelFont); - Point textExtent = gc.textExtent(label); - gc.drawText(label, 10 - textExtent.x / 2, 7.5 - textExtent.y / 2, true); - gc.setFont(oldFont); - } - - @Override - public boolean clicked(double x, double y) - { - timeline.addEvent((e) -> toggle(), (int) (System.currentTimeMillis() - timeline.getSimulationTime())); - return true; - } - - @Override - public int getConnectedWireEndsCount() - { - return connectedWireEnds.size(); - } - - @Override - public ReadEnd getConnectedWireEnd(int connectionIndex) - { - return connectedWireEnds.get(connectionIndex); - } + - @Override - public Point getWireEndConnectionPoint(int connectionI) - { - return wireEndConnectionPoints.get(connectionI); - } - } ++}