From 9c142c9ad59d2af070ebb6495b1ca48242da62d8 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:10:37 +0200 Subject: [PATCH 01/16] Splitted ViewModel and ViewModelModifiable --- .../logic/ui/SimpleLogicUIStandalone.java | 8 ++--- .../logic/ui/examples/Am2901Example.java | 4 +-- .../logic/ui/examples/RSLatchExample.java | 6 ++-- .../mograsim/logic/ui/model/ViewModel.java | 15 +++------ .../logic/ui/model/ViewModelModifiable.java | 31 +++++++++++++++++++ .../ui/model/components/Am2901NANDBased.java | 4 +-- .../logic/ui/model/components/GUIAndGate.java | 4 +-- .../ui/model/components/GUIBitDisplay.java | 4 +-- .../ui/model/components/GUIComponent.java | 8 ++--- .../ui/model/components/GUIManualSwitch.java | 6 ++-- .../logic/ui/model/components/GUINotGate.java | 4 +-- .../logic/ui/model/components/GUIOrGate.java | 4 +-- .../components/SimpleRectangularGUIGate.java | 8 ++--- .../logic/ui/model/wires/GUIWire.java | 6 ++-- .../logic/ui/model/wires/WireCrossPoint.java | 4 +-- 15 files changed, 71 insertions(+), 45 deletions(-) create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java index 962427ff..6c856c47 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/SimpleLogicUIStandalone.java @@ -3,13 +3,13 @@ package net.mograsim.logic.ui; import java.util.function.Consumer; import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; public class SimpleLogicUIStandalone { - public static void executeVisualisation(Consumer setupViewModel) + public static void executeVisualisation(Consumer setupViewModel) { LogicModelParameters params = new LogicModelParameters(); params.gateProcessTime = 50; @@ -17,10 +17,10 @@ public class SimpleLogicUIStandalone executeVisualisation(setupViewModel, params); } - public static void executeVisualisation(Consumer setupViewModel, LogicModelParameters params) + public static void executeVisualisation(Consumer setupViewModel, LogicModelParameters params) { // setup view model - ViewModel viewModel = new ViewModel(); + ViewModelModifiable viewModel = new ViewModelModifiable(); setupViewModel.accept(viewModel); // convert to logic model diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java index 0cafa7e6..3ead2c7d 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java @@ -1,7 +1,7 @@ package net.mograsim.logic.ui.examples; import net.mograsim.logic.ui.SimpleLogicUIStandalone; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.components.Am2901NANDBased; import net.mograsim.logic.ui.model.components.GUIBitDisplay; import net.mograsim.logic.ui.model.components.GUIManualSwitch; @@ -19,7 +19,7 @@ public class Am2901Example } @SuppressWarnings("unused") // for GUIWires being created - public static void createAm2901Example(ViewModel model) + public static void createAm2901Example(ViewModelModifiable model) { Am2901NANDBased am2901 = new Am2901NANDBased(model); am2901.moveTo(100, 0); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java index af91d1f1..835d7948 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/RSLatchExample.java @@ -1,13 +1,13 @@ package net.mograsim.logic.ui.examples; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.mograsim.logic.ui.SimpleLogicUIStandalone; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.components.GUIManualSwitch; import net.mograsim.logic.ui.model.components.GUINotGate; import net.mograsim.logic.ui.model.components.GUIOrGate; import net.mograsim.logic.ui.model.wires.GUIWire; import net.mograsim.logic.ui.model.wires.WireCrossPoint; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; public class RSLatchExample { @@ -17,7 +17,7 @@ public class RSLatchExample } @SuppressWarnings("unused") // for GUIWires being created - public static void createRSLatchExample(ViewModel model) + public static void createRSLatchExample(ViewModelModifiable model) { GUIManualSwitch rIn = new GUIManualSwitch(model); rIn.moveTo(100, 100); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java index 7f9b113f..869f1a11 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java @@ -23,7 +23,7 @@ public class ViewModel private final Runnable redrawListenerForSubcomponents; - public ViewModel() + protected ViewModel() { components = new ArrayList<>(); componentsUnmodifiable = Collections.unmodifiableList(components); @@ -43,7 +43,7 @@ public class ViewModel * 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 GUIComponent::new. */ - public void componentCreated(GUIComponent component) + protected void componentCreated(GUIComponent component) { if (components.contains(component)) throw new IllegalStateException("Don't add the same component twice!"); @@ -57,7 +57,7 @@ public class ViewModel * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from * application code as it is automatically called in GUIComponent::destroy. */ - public void componentDestroyed(GUIComponent component) + protected void componentDestroyed(GUIComponent component) { if (!components.contains(component)) throw new IllegalStateException("Don't remove the same component twice!"); @@ -71,7 +71,7 @@ public class ViewModel * 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 GUIComponent::new. */ - public void wireCreated(GUIWire wire) + protected void wireCreated(GUIWire wire) { if (wires.contains(wire)) throw new IllegalStateException("Don't add the same wire twice!"); @@ -85,7 +85,7 @@ public class ViewModel * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from * application code as it is automatically called in GUIComponent::destroy. */ - public void wireDestroyed(GUIWire wire) + protected void wireDestroyed(GUIWire wire) { if (!wires.contains(wire)) throw new IllegalStateException("Don't remove the same wire twice!"); @@ -105,11 +105,6 @@ public class ViewModel return wiresUnmodifiable; } -// public void requestRedraw() -// { -// callRedrawListeners(); -// } - // @formatter:off public void addComponentAddedListener (Consumer listener) {componentAddedListeners .add (listener);} public void addComponentRemovedListener (Consumer listener) {componentRemovedListeners.add (listener);} diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java new file mode 100644 index 00000000..21863db7 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModelModifiable.java @@ -0,0 +1,31 @@ +package net.mograsim.logic.ui.model; + +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.wires.GUIWire; + +public class ViewModelModifiable extends ViewModel +{ + @Override + public void componentCreated(GUIComponent component) + { + super.componentCreated(component); + } + + @Override + public void componentDestroyed(GUIComponent component) + { + super.componentDestroyed(component); + } + + @Override + public void wireCreated(GUIWire wire) + { + super.wireCreated(wire); + } + + @Override + public void wireDestroyed(GUIWire wire) + { + super.wireDestroyed(wire); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java index 7aace4d6..d63b41da 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java @@ -6,7 +6,7 @@ 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; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; // TODO make a superclass @@ -15,7 +15,7 @@ public class Am2901NANDBased extends GUIComponent public final List inputNames; public final List outputNames; - public Am2901NANDBased(ViewModel model) + public Am2901NANDBased(ViewModelModifiable model) { super(model); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java index 440881df..716d210c 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIAndGate.java @@ -1,10 +1,10 @@ package net.mograsim.logic.ui.model.components; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; public class GUIAndGate extends SimpleRectangularGUIGate { - public GUIAndGate(ViewModel model, int logicWidth) + public GUIAndGate(ViewModelModifiable model, int logicWidth) { super(model, logicWidth, "&", false); setInputCount(2);// TODO make variable diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java index abaec56b..fd2f736c 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java @@ -8,7 +8,7 @@ import net.mograsim.logic.core.LogicObservable; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.BitDisplay; import net.mograsim.logic.core.types.BitVectorFormatter; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; public class GUIBitDisplay extends GUIComponent @@ -22,7 +22,7 @@ public class GUIBitDisplay extends GUIComponent private final LogicObserver logicObs; private BitDisplay bitDisplay; - public GUIBitDisplay(ViewModel model) + public GUIBitDisplay(ViewModelModifiable model) { super(model); logicObs = (i) -> requestRedraw(); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java index ca21622a..a4c1031f 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java @@ -5,14 +5,14 @@ import java.util.Collections; import java.util.List; import java.util.function.Consumer; -import net.mograsim.logic.ui.model.ViewModel; -import net.mograsim.logic.ui.model.wires.Pin; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.wires.Pin; public abstract class GUIComponent { - protected final ViewModel model; + protected final ViewModelModifiable model; private final Rectangle bounds; private final List pins; protected final List pinsUnmodifiable; @@ -24,7 +24,7 @@ public abstract class GUIComponent private final Runnable redrawListenerForSubcomponents; - public GUIComponent(ViewModel model) + public GUIComponent(ViewModelModifiable model) { this.model = model; this.bounds = new Rectangle(0, 0, 0, 0); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java index dbeabd2c..0993024d 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java @@ -1,7 +1,5 @@ package net.mograsim.logic.ui.model.components; -import net.mograsim.logic.ui.model.ViewModel; -import net.mograsim.logic.ui.model.wires.Pin; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; @@ -11,6 +9,8 @@ import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.ManualSwitch; import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.wires.Pin; public class GUIManualSwitch extends GUIComponent { @@ -24,7 +24,7 @@ public class GUIManualSwitch extends GUIComponent private ManualSwitch logicSwitch; private ReadEnd end; - public GUIManualSwitch(ViewModel model) + public GUIManualSwitch(ViewModelModifiable model) { super(model); logicObs = (i) -> requestRedraw(); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java index 01df349b..76d24508 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINotGate.java @@ -1,10 +1,10 @@ package net.mograsim.logic.ui.model.components; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; public class GUINotGate extends SimpleRectangularGUIGate { - public GUINotGate(ViewModel model, int logicWidth) + public GUINotGate(ViewModelModifiable model, int logicWidth) { super(model, logicWidth, "1", true); setInputCount(1); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java index bbc436d7..d4fdb7fe 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIOrGate.java @@ -1,10 +1,10 @@ package net.mograsim.logic.ui.model.components; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; public class GUIOrGate extends SimpleRectangularGUIGate { - public GUIOrGate(ViewModel model, int logicWidth) + public GUIOrGate(ViewModelModifiable model, int logicWidth) { super(model, logicWidth, "\u22651", false);// ">=1" setInputCount(2); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java index a2875c6a..a1b0c8ad 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java @@ -4,13 +4,13 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import net.mograsim.logic.ui.model.ViewModel; -import net.mograsim.logic.ui.model.wires.MovablePin; -import net.mograsim.logic.ui.model.wires.Pin; 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; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.wires.MovablePin; +import net.mograsim.logic.ui.model.wires.Pin; public class SimpleRectangularGUIGate extends GUIComponent { @@ -28,7 +28,7 @@ public class SimpleRectangularGUIGate extends GUIComponent private final List inputPins; private final List inputPinsUnmodifiable; - protected SimpleRectangularGUIGate(ViewModel model, int logicWidth, String label, boolean isInverted) + protected SimpleRectangularGUIGate(ViewModelModifiable model, int logicWidth, String label, boolean isInverted) { super(model); this.label = label; diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java index 50871fe5..771e2e3a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java @@ -10,11 +10,11 @@ import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.ui.ColorHelper; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; public class GUIWire { - private final ViewModel model; + private final ViewModelModifiable model; public final int logicWidth; private Pin pin1; private Pin pin2; @@ -25,7 +25,7 @@ public class GUIWire private final LogicObserver logicObs; private ReadEnd end; - public GUIWire(ViewModel model, Pin pin1, Pin pin2, Point... path) + public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path) { logicObs = (i) -> callRedrawListeners(); this.model = model; diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java index 46262808..eb3028eb 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java @@ -7,7 +7,7 @@ import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.ui.ColorHelper; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.components.GUIComponent; public class WireCrossPoint extends GUIComponent @@ -18,7 +18,7 @@ public class WireCrossPoint extends GUIComponent private final LogicObserver logicObs; private ReadEnd end; - public WireCrossPoint(ViewModel model, int logicWidth) + public WireCrossPoint(ViewModelModifiable model, int logicWidth) { super(model); logicObs = (i) -> requestRedraw(); -- 2.17.1 From 4dca33ac72b3f476ab069d6627f5e824c4a55a5b Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:11:12 +0200 Subject: [PATCH 02/16] Cleanups in bounding box rendering --- .../net/mograsim/logic/ui/model/components/Am2901NANDBased.java | 2 +- .../net/mograsim/logic/ui/model/components/GUIBitDisplay.java | 2 +- .../net/mograsim/logic/ui/model/components/GUIManualSwitch.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java index d63b41da..40357957 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java @@ -35,10 +35,10 @@ public class Am2901NANDBased extends GUIComponent double posX = getBounds().x; double posY = getBounds().y; + gc.drawRectangle(getBounds()); Font oldFont = gc.getFont(); Font labelFont = new Font(oldFont.getName(), 4, oldFont.getStyle()); gc.setFont(labelFont); - gc.drawRectangle(posX, posY, 50, getBounds().height); for (int i = 0; i < inputNames.size(); i++) { Point textExtent = gc.textExtent(inputNames.get(i)); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java index fd2f736c..ec397c02 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java @@ -38,7 +38,7 @@ public class GUIBitDisplay extends GUIComponent double posY = getBounds().y; // TODO maybe draw switch state too? - gc.drawRectangle(posX, posY, width, height); + gc.drawRectangle(getBounds()); String label = bitDisplay == null ? BitVectorFormatter.formatAsString(null) : BitVectorFormatter.formatAsString(bitDisplay.getDisplayedValue()); Font oldFont = gc.getFont(); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java index 0993024d..8b9bcd90 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java @@ -40,7 +40,7 @@ public class GUIManualSwitch extends GUIComponent double posY = getBounds().y; // TODO maybe draw switch state too? - gc.drawRectangle(posX, posY, width, height); + gc.drawRectangle(getBounds()); String label = BitVectorFormatter.formatValueAsString(end); Font oldFont = gc.getFont(); Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); -- 2.17.1 From 95d72ebf4ebc8b9aca649d3e604709fa9daaca24 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:11:22 +0200 Subject: [PATCH 03/16] Added SubmodelComponent --- .../logic/ui/examples/SubmodelExample.java | 33 ++++ .../model/components/SubmodelComponent.java | 156 ++++++++++++++++++ .../model/components/SubmodelInterface.java | 18 ++ .../components/TestSubmodelNANDComponent.java | 34 ++++ .../modeladapter/ViewLogicModelAdapter.java | 68 +++++--- 5 files changed, 285 insertions(+), 24 deletions(-) create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelInterface.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java new file mode 100644 index 00000000..3cba4db7 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java @@ -0,0 +1,33 @@ +package net.mograsim.logic.ui.examples; + +import net.mograsim.logic.ui.SimpleLogicUIStandalone; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.components.GUIBitDisplay; +import net.mograsim.logic.ui.model.components.GUIManualSwitch; +import net.mograsim.logic.ui.model.components.TestSubmodelNANDComponent; +import net.mograsim.logic.ui.model.wires.GUIWire; + +public class SubmodelExample +{ + public static void main(String[] args) + { + SimpleLogicUIStandalone.executeVisualisation(SubmodelExample::createSubmodelExample); + } + + @SuppressWarnings("unused") // GUIWires being created + public static void createSubmodelExample(ViewModelModifiable model) + { + GUIManualSwitch swA = new GUIManualSwitch(model); + swA.moveTo(0, 0); + GUIManualSwitch swB = new GUIManualSwitch(model); + swB.moveTo(0, 25); + TestSubmodelNANDComponent nand = new TestSubmodelNANDComponent(model); + nand.moveTo(30, 10); + GUIBitDisplay bdY = new GUIBitDisplay(model); + bdY.moveTo(70, 12.5); + + new GUIWire(model, swA.getOutputPin(), nand.getPins().get(0)); + new GUIWire(model, swB.getOutputPin(), nand.getPins().get(1)); + new GUIWire(model, nand.getPins().get(2), bdY.getInputPin()); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java new file mode 100644 index 00000000..9b0e41a3 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -0,0 +1,156 @@ +package net.mograsim.logic.ui.model.components; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import net.haspamelodica.swt.helper.gcs.GCDefaultConfig; +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.gcs.TranslatedGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.LogicUIRenderer; +import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.wires.Pin; + +public class SubmodelComponent extends GUIComponent +{ + protected final ViewModelModifiable submodelModifiable; + public final ViewModel submodel; + private final Map submodelPinsPerSupermodelPin; + private final Map submodelPinsPerSupermodelPinUnmodifiable; + private final Map supermodelPinsPerSubmodelPin; + private final Map supermodelPinsPerSubmodelPinUnmodifiable; + private final SubmodelInterface submodelInterface; + + private double submodelScale; + private final LogicUIRenderer renderer; + + public SubmodelComponent(ViewModelModifiable model) + { + super(model); + this.submodelModifiable = new ViewModelModifiable(); + this.submodel = submodelModifiable; + this.submodelPinsPerSupermodelPin = new HashMap<>(); + this.submodelPinsPerSupermodelPinUnmodifiable = Collections.unmodifiableMap(submodelPinsPerSupermodelPin); + this.supermodelPinsPerSubmodelPin = new HashMap<>(); + this.supermodelPinsPerSubmodelPinUnmodifiable = Collections.unmodifiableMap(supermodelPinsPerSubmodelPin); + this.submodelInterface = new SubmodelInterface(submodelModifiable); + + this.submodelScale = 1; + this.renderer = new LogicUIRenderer(submodelModifiable); + + submodelModifiable.addRedrawListener(this::requestRedraw); + } + + protected void setSubmodelScale(double submodelScale) + { + this.submodelScale = submodelScale; + + for (Entry e : supermodelPinsPerSubmodelPin.entrySet()) + e.getKey().setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale); + + requestRedraw();// needed if there is no submodel interface pin + } + + /** + * Returns the submodel pin. + */ + protected Pin addSubmodelInterface(int logicWidth, double relX, double relY) + { + PinMovable submodelPin = new PinMovable(submodelInterface, logicWidth, relX / submodelScale, relY / submodelScale); + submodelInterface.addPin(submodelPin); + + PinMovable supermodelPin = new PinMovable(this, logicWidth, relX, relY); + addPin(supermodelPin); + + submodelPinsPerSupermodelPin.put(supermodelPin, submodelPin); + supermodelPinsPerSubmodelPin.put(submodelPin, supermodelPin); + + // no need to call requestRedraw() because addPin() will request a redraw + return submodelPin; + } + + protected void moveSubmodelInterface(Pin supermodelPin, double relX, double relY) + { + PinMovable submodelPin = getSubmodelMovablePin(supermodelPin); + PinMovable supermodelPinMovable = getSupermodelMovablePin(submodelPin); + + submodelPin.setRelPos(relX / submodelScale, relY / submodelScale); + supermodelPinMovable.setRelPos(relX, relY); + + // no need to call requestRedraw() because setRelPos() will request a redraw + } + + protected void removeSubmodelInterface(Pin supermodelPin) + { + removePin(supermodelPin); + Pin submodelPin = getSubmodelMovablePin(supermodelPin); + submodelInterface.removePin(submodelPin); + + submodelPinsPerSupermodelPin.remove(supermodelPin); + supermodelPinsPerSubmodelPin.remove(submodelPin); + + // no need to call requestRedraw() because removePin() will request a redraw + } + + public Map getSupermodelPinsPerSubmodelPin() + { + return supermodelPinsPerSubmodelPinUnmodifiable; + } + + public Pin getSupermodelPin(Pin submodelPin) + { + return getSupermodelMovablePin(submodelPin); + } + + protected PinMovable getSupermodelMovablePin(Pin submodelPin) + { + return supermodelPinsPerSubmodelPin.get(submodelPin); + } + + public Map getSubmodelPinsPerSupermodelPin() + { + return submodelPinsPerSupermodelPinUnmodifiable; + } + + public Pin getSubmodelPin(Pin supermodelPin) + { + return getSubmodelMovablePin(supermodelPin); + } + + protected PinMovable getSubmodelMovablePin(Pin supermodelPin) + { + return submodelPinsPerSupermodelPin.get(supermodelPin); + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + double posX = getBounds().x; + double posY = getBounds().y; + + GCDefaultConfig conf = new GCDefaultConfig(gc); + TranslatedGC tgc = new TranslatedGC(gc, posX, posY, submodelScale, true); + conf.reset(tgc); + renderer.render(tgc, visibleRegion.translate(posX, posY, submodelScale)); + conf.reset(gc); + // draw the "bounding box" after all other operations to make interface pins look better + gc.drawRectangle(getBounds()); + } + + private static class PinMovable extends Pin + { + public PinMovable(GUIComponent component, int logicWidth, double relX, double relY) + { + super(component, logicWidth, relX, relY); + } + + @Override + protected void setRelPos(double relX, double relY) + { + super.setRelPos(relX, relY); + } + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelInterface.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelInterface.java new file mode 100644 index 00000000..8f448a80 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelInterface.java @@ -0,0 +1,18 @@ +package net.mograsim.logic.ui.model.components; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.ViewModelModifiable; + +public class SubmodelInterface extends GUIComponent +{ + public SubmodelInterface(ViewModelModifiable model) + { + super(model); + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + {// nothing to do here + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java new file mode 100644 index 00000000..9cfdb266 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java @@ -0,0 +1,34 @@ +package net.mograsim.logic.ui.model.components; + +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.wires.GUIWire; +import net.mograsim.logic.ui.model.wires.Pin; + +public class TestSubmodelNANDComponent extends SubmodelComponent +{ + public TestSubmodelNANDComponent(ViewModelModifiable model) + { + super(model); + setSize(30, 20); + setSubmodelScale(.5); + initSubmodelComponents(); + } + + @SuppressWarnings("unused") // GUIWires being created + private void initSubmodelComponents() + { + Pin A = addSubmodelInterface(1, 0, 5); + Pin B = addSubmodelInterface(1, 0, 15); + Pin Y = addSubmodelInterface(1, 30, 10); + + GUIAndGate and = new GUIAndGate(submodelModifiable, 1); + and.moveTo(5, 10); + GUINotGate not = new GUINotGate(submodelModifiable, 1); + not.moveTo(30, 15); + + new GUIWire(submodelModifiable, A, and.getInputPins().get(0)); + new GUIWire(submodelModifiable, B, and.getInputPins().get(1)); + new GUIWire(submodelModifiable, and.getOutputPin(), not.getInputPins().get(0)); + new GUIWire(submodelModifiable, not.getOutputPin(), Y); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index 3f05964e..80c2898a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -1,13 +1,11 @@ package net.mograsim.logic.ui.modeladapter; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -24,6 +22,8 @@ import net.mograsim.logic.ui.model.components.GUIAndGate; import net.mograsim.logic.ui.model.components.GUIComponent; import net.mograsim.logic.ui.model.components.GUINotGate; import net.mograsim.logic.ui.model.components.GUIOrGate; +import net.mograsim.logic.ui.model.components.SubmodelComponent; +import net.mograsim.logic.ui.model.components.SubmodelInterface; import net.mograsim.logic.ui.model.wires.GUIWire; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.model.wires.WireCrossPoint; @@ -45,7 +45,7 @@ public class ViewLogicModelAdapter componentAdaptersModifiable.add(new ManualSwitchAdapter()); componentAdaptersModifiable.add(new BitDisplayAdapter()); componentAdaptersModifiable.add(new Am2901NANDBasedAdapter()); - // TODO list all "primitive" adapters here + // TODO list all adapters here componentAdapters = Collections.unmodifiableMap( componentAdaptersModifiable.stream().collect(Collectors.toMap(ComponentAdapter::getSupportedClass, Function.identity()))); } @@ -55,48 +55,68 @@ public class ViewLogicModelAdapter // TODO replace Timeline with LogicModel as soon as it exists Timeline timeline = new Timeline(10); - Map logicWiresPerPin = convertWires( - viewModel.getComponents().stream().flatMap(component -> component.getPins().stream()).collect(Collectors.toSet()), - viewModel.getWires(), params, timeline); + convert(viewModel, params, timeline, Map.of()); + + return timeline; + } + + private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map externalWires) + { + Map logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline); Map logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin); - Map oneToOneComponents = new HashMap<>(); for (GUIComponent guiComp : viewModel.getComponents()) { - if (!(guiComp instanceof WireCrossPoint)) - oneToOneComponents.put(guiComp, createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, - componentAdapters.get(guiComp.getClass()))); - else + if (guiComp instanceof SubmodelComponent) + { + SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp; + Map supermodelPinsPerSubmodelPin = guiCompCasted.getSupermodelPinsPerSubmodelPin(); + Map externalWiresForSubmodel = supermodelPinsPerSubmodelPin.entrySet().stream() + .collect(Collectors.toMap(Entry::getKey, e -> logicWiresPerPin.get(e.getValue()))); + convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel); + } else if (guiComp instanceof WireCrossPoint) { WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp; guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd()); - } + } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces + createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass())); } + } - // TODO handle complex components - - List logicComponents = new ArrayList<>(); - // null means "no one to one mapping" - oneToOneComponents.values().stream().filter(Objects::nonNull).forEach(logicComponents::add); - - return timeline; + private static Set getAllPins(ViewModel viewModel) + { + return viewModel.getComponents().stream().flatMap(component -> component.getPins().stream()).collect(Collectors.toSet()); } - private static Map convertWires(Set allPins, List wires, LogicModelParameters params, Timeline timeline) + private static Map convertWires(Set allPins, List wires, Map externalWires, + LogicModelParameters params, Timeline timeline) { Map> connectedPinGroups = getConnectedPinGroups(allPins, wires); - Map logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups); + Map logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups, externalWires); setGUIWiresLogicModelBinding(wires, logicWiresPerPin); return logicWiresPerPin; } - private static Map createLogicWires(LogicModelParameters params, Timeline timeline, Map> connectedPinGroups) + private static Map createLogicWires(LogicModelParameters params, Timeline timeline, Map> connectedPinGroups, + Map externalWires) { Map logicWiresPerPin = new HashMap<>(); Map, Wire> logicWiresPerPinGroup = new HashMap<>(); for (Entry> e : connectedPinGroups.entrySet()) - logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), - set -> new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime))); + logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), set -> + { + Wire externalWire = null; + for (Pin p : set) + { + Wire externalWireCandidate = externalWires.get(p); + if (externalWireCandidate != null) + if (externalWire == null) + externalWire = externalWireCandidate; + else + throw new IllegalArgumentException("Two pins to external wires can't be connected directly"); + } + return new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime); + })); return logicWiresPerPin; } -- 2.17.1 From c63192e7f99da7edfcafb65178505b99f7918c41 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:11:58 +0200 Subject: [PATCH 04/16] Updated LogicUIPart to ViewModelModifiable change --- .../src/net/mograsim/rcp/parts/LogicUIPart.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java b/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java index d23c9f45..2979c54b 100644 --- a/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java @@ -7,14 +7,14 @@ import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; +import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.ui.LogicExecuter; import net.mograsim.logic.ui.LogicUICanvas; import net.mograsim.logic.ui.examples.RSLatchExample; -import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; -import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; -import net.mograsim.logic.core.timeline.Timeline; public class LogicUIPart { @@ -25,7 +25,7 @@ public class LogicUIPart public void create(Composite parent) { // setup view model - ViewModel viewModel = new ViewModel(); + ViewModelModifiable viewModel = new ViewModelModifiable(); RSLatchExample.createRSLatchExample(viewModel); // convert to logic model -- 2.17.1 From 04218dc9e67abb384c4d031620ef3f8329ac861e Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:12:44 +0200 Subject: [PATCH 05/16] Organized imports in all three projects --- .../logic/core/components/gates/MultiInputGate.java | 2 +- .../src/net/mograsim/logic/ui/model/wires/Pin.java | 2 +- .../ui/modeladapter/componentadapters/ComponentAdapter.java | 6 +++--- .../modeladapter/componentadapters/ManualSwitchAdapter.java | 6 +++--- .../modeladapter/componentadapters/SimpleGateAdapter.java | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java index 322ccce7..6b183e37 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java +++ b/net.mograsim.logic.core/src/net/mograsim/logic/core/components/gates/MultiInputGate.java @@ -4,8 +4,8 @@ import java.util.List; import net.mograsim.logic.core.components.BasicComponent; import net.mograsim.logic.core.timeline.Timeline; -import net.mograsim.logic.core.types.MutationOperation; import net.mograsim.logic.core.types.BitVector.BitVectorMutator; +import net.mograsim.logic.core.types.MutationOperation; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java index 8c0333a4..f8325a09 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java @@ -4,9 +4,9 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import net.mograsim.logic.ui.model.components.GUIComponent; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; //TODO add an ID and/or a name public class Pin diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java index 0dd563e5..83b8dbbe 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java @@ -2,12 +2,12 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.Map; -import net.mograsim.logic.ui.model.components.GUIComponent; -import net.mograsim.logic.ui.model.wires.Pin; -import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; public interface ComponentAdapter { diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java index 197cf747..c8db4888 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java @@ -2,14 +2,14 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.Map; -import net.mograsim.logic.ui.model.components.GUIManualSwitch; -import net.mograsim.logic.ui.model.wires.Pin; -import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.components.ManualSwitch; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; +import net.mograsim.logic.ui.model.components.GUIManualSwitch; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; public class ManualSwitchAdapter implements ComponentAdapter { diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java index 1902d626..b059e025 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java @@ -3,14 +3,14 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.List; import java.util.Map; -import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate; -import net.mograsim.logic.ui.model.wires.Pin; -import net.mograsim.logic.ui.modeladapter.LogicModelParameters; import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; +import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; public class SimpleGateAdapter implements ComponentAdapter { -- 2.17.1 From d255018e64db08c791774b98b91ca99b6d7ef1da Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:14:55 +0200 Subject: [PATCH 06/16] Fixed stupid bug causing submodules not to work --- .../mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index 80c2898a..09cd6cba 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -115,7 +115,7 @@ public class ViewLogicModelAdapter else throw new IllegalArgumentException("Two pins to external wires can't be connected directly"); } - return new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime); + return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire; })); return logicWiresPerPin; } -- 2.17.1 From f4ecc0a914889474581caf5f4da0dad7a410ae3c Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:35:53 +0200 Subject: [PATCH 07/16] Improved submodule rendering --- .../ui/model/components/SubmodelComponent.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index 9b0e41a3..eae636a9 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -25,6 +25,8 @@ public class SubmodelComponent extends GUIComponent private final SubmodelInterface submodelInterface; private double submodelScale; + private double maxVisibleRegionFillRatioForAlpha0; + private double minVisibleRegionFillRatioForAlpha1; private final LogicUIRenderer renderer; public SubmodelComponent(ViewModelModifiable model) @@ -39,6 +41,8 @@ public class SubmodelComponent extends GUIComponent this.submodelInterface = new SubmodelInterface(submodelModifiable); this.submodelScale = 1; + this.maxVisibleRegionFillRatioForAlpha0 = 0.1; + this.minVisibleRegionFillRatioForAlpha1 = 0.8; this.renderer = new LogicUIRenderer(submodelModifiable); submodelModifiable.addRedrawListener(this::requestRedraw); @@ -134,12 +138,22 @@ public class SubmodelComponent extends GUIComponent GCDefaultConfig conf = new GCDefaultConfig(gc); TranslatedGC tgc = new TranslatedGC(gc, posX, posY, submodelScale, true); conf.reset(tgc); + double visibleRegionFillRatio = Math.max(getBounds().width / visibleRegion.width, getBounds().height / visibleRegion.height); + double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1); + alphaFactor = Math.max(0, Math.min(1, alphaFactor)); + // we need to take the old alpha into account to support nested submodules better. + gc.setAlpha(Math.max(0, Math.min(255, (int) (gc.getAlpha() * alphaFactor)))); renderer.render(tgc, visibleRegion.translate(posX, posY, submodelScale)); conf.reset(gc); // draw the "bounding box" after all other operations to make interface pins look better gc.drawRectangle(getBounds()); } + private static double map(double val, double valMin, double valMax, double mapMin, double mapMax) + { + return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin); + } + private static class PinMovable extends Pin { public PinMovable(GUIComponent component, int logicWidth, double relX, double relY) -- 2.17.1 From 4c590b82bc039bec5669e8cbb40703057274ab8c Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 22:41:38 +0200 Subject: [PATCH 08/16] SubmodelComponents now have a label shown when zoomed out --- .../logic/ui/model/components/SubmodelComponent.java | 11 +++++++++-- .../model/components/TestSubmodelNANDComponent.java | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index eae636a9..4b67650b 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -8,6 +8,7 @@ import java.util.Map.Entry; import net.haspamelodica.swt.helper.gcs.GCDefaultConfig; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.gcs.TranslatedGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.ui.LogicUIRenderer; import net.mograsim.logic.ui.model.ViewModel; @@ -24,12 +25,13 @@ public class SubmodelComponent extends GUIComponent private final Map supermodelPinsPerSubmodelPinUnmodifiable; private final SubmodelInterface submodelInterface; + private final String label; private double submodelScale; private double maxVisibleRegionFillRatioForAlpha0; private double minVisibleRegionFillRatioForAlpha1; private final LogicUIRenderer renderer; - public SubmodelComponent(ViewModelModifiable model) + public SubmodelComponent(ViewModelModifiable model, String label) { super(model); this.submodelModifiable = new ViewModelModifiable(); @@ -40,6 +42,7 @@ public class SubmodelComponent extends GUIComponent this.supermodelPinsPerSubmodelPinUnmodifiable = Collections.unmodifiableMap(supermodelPinsPerSubmodelPin); this.submodelInterface = new SubmodelInterface(submodelModifiable); + this.label = label; this.submodelScale = 1; this.maxVisibleRegionFillRatioForAlpha0 = 0.1; this.minVisibleRegionFillRatioForAlpha1 = 0.8; @@ -142,8 +145,12 @@ public class SubmodelComponent extends GUIComponent double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1); alphaFactor = Math.max(0, Math.min(1, alphaFactor)); // we need to take the old alpha into account to support nested submodules better. - gc.setAlpha(Math.max(0, Math.min(255, (int) (gc.getAlpha() * alphaFactor)))); + int oldAlpha = gc.getAlpha(); + gc.setAlpha(Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)))); renderer.render(tgc, visibleRegion.translate(posX, posY, submodelScale)); + gc.setAlpha(Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))))); + Point textExtent = gc.textExtent(label); + gc.drawText(label, posX + (getBounds().width - textExtent.x) / 2, posY + (getBounds().height - textExtent.y) / 2, true); conf.reset(gc); // draw the "bounding box" after all other operations to make interface pins look better gc.drawRectangle(getBounds()); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java index 9cfdb266..d1ce89a7 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java @@ -8,7 +8,7 @@ public class TestSubmodelNANDComponent extends SubmodelComponent { public TestSubmodelNANDComponent(ViewModelModifiable model) { - super(model); + super(model, "TestNAND"); setSize(30, 20); setSubmodelScale(.5); initSubmodelComponents(); -- 2.17.1 From 6c7b38a5ba03942d754dbb4ecd1f4b6d6478c68e Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:03:19 +0200 Subject: [PATCH 09/16] Removed old code --- .../src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java index 64b442e3..88221b19 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUIStandaloneGUI.java @@ -8,7 +8,6 @@ import org.eclipse.swt.widgets.Shell; import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay; import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; import net.mograsim.logic.ui.model.ViewModel; -import net.mograsim.logic.ui.modeladapter.LogicModelParameters; /** * Standalone simulation visualizer graphical user interface. @@ -33,12 +32,6 @@ public class LogicUIStandaloneGUI userInput.buttonZoom = 2; userInput.enableUserInput(); new ZoomableCanvasOverlay(ui, null).enableScale(); - - // TODO don't do this here - LogicModelParameters params = new LogicModelParameters(); - params.gateProcessTime = 50; - params.wireTravelTime = 10; -// timeline = ViewLogicModelAdapter.convert(model, params); } public LogicUICanvas getLogicUICanvas() -- 2.17.1 From 7df30691216ad44712c2664d1717aff550952752 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:14:36 +0200 Subject: [PATCH 10/16] Renamed Am2901NANDBased to AtomicAm2901NANDBased --- .../{Am2901Example.java => AtomicAm2901Example.java} | 8 ++++---- ...Am2901NANDBased.java => AtomicAm2901NANDBased.java} | 4 ++-- .../logic/ui/modeladapter/ViewLogicModelAdapter.java | 4 ++-- ...dAdapter.java => AtomicAm2901NANDBasedAdapter.java} | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) rename net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/{Am2901Example.java => AtomicAm2901Example.java} (81%) rename net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/{Am2901NANDBased.java => AtomicAm2901NANDBased.java} (94%) rename net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/{Am2901NANDBasedAdapter.java => AtomicAm2901NANDBasedAdapter.java} (99%) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/AtomicAm2901Example.java similarity index 81% rename from net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/AtomicAm2901Example.java index 3ead2c7d..39ee8fc4 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/Am2901Example.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/AtomicAm2901Example.java @@ -2,26 +2,26 @@ package net.mograsim.logic.ui.examples; import net.mograsim.logic.ui.SimpleLogicUIStandalone; import net.mograsim.logic.ui.model.ViewModelModifiable; -import net.mograsim.logic.ui.model.components.Am2901NANDBased; +import net.mograsim.logic.ui.model.components.AtomicAm2901NANDBased; import net.mograsim.logic.ui.model.components.GUIBitDisplay; import net.mograsim.logic.ui.model.components.GUIManualSwitch; import net.mograsim.logic.ui.model.wires.GUIWire; import net.mograsim.logic.ui.modeladapter.LogicModelParameters; -public class Am2901Example +public class AtomicAm2901Example { public static void main(String[] args) { LogicModelParameters params = new LogicModelParameters(); params.gateProcessTime = 1; params.wireTravelTime = 1; - SimpleLogicUIStandalone.executeVisualisation(Am2901Example::createAm2901Example, params); + SimpleLogicUIStandalone.executeVisualisation(AtomicAm2901Example::createAm2901Example, params); } @SuppressWarnings("unused") // for GUIWires being created public static void createAm2901Example(ViewModelModifiable model) { - Am2901NANDBased am2901 = new Am2901NANDBased(model); + AtomicAm2901NANDBased am2901 = new AtomicAm2901NANDBased(model); am2901.moveTo(100, 0); for (int i = 0; i < am2901.inputNames.size(); i++) { diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java similarity index 94% rename from net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java index 40357957..16587537 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/Am2901NANDBased.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java @@ -10,12 +10,12 @@ import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; // TODO make a superclass -public class Am2901NANDBased extends GUIComponent +public class AtomicAm2901NANDBased extends GUIComponent { public final List inputNames; public final List outputNames; - public Am2901NANDBased(ViewModelModifiable model) + public AtomicAm2901NANDBased(ViewModelModifiable model) { super(model); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index 09cd6cba..ad363d33 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -27,7 +27,7 @@ import net.mograsim.logic.ui.model.components.SubmodelInterface; import net.mograsim.logic.ui.model.wires.GUIWire; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.model.wires.WireCrossPoint; -import net.mograsim.logic.ui.modeladapter.componentadapters.Am2901NANDBasedAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.AtomicAm2901NANDBasedAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; @@ -44,7 +44,7 @@ public class ViewLogicModelAdapter componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); componentAdaptersModifiable.add(new ManualSwitchAdapter()); componentAdaptersModifiable.add(new BitDisplayAdapter()); - componentAdaptersModifiable.add(new Am2901NANDBasedAdapter()); + componentAdaptersModifiable.add(new AtomicAm2901NANDBasedAdapter()); // TODO list all adapters here componentAdapters = Collections.unmodifiableMap( componentAdaptersModifiable.stream().collect(Collectors.toMap(ComponentAdapter::getSupportedClass, Function.identity()))); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/Am2901NANDBasedAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java similarity index 99% rename from net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/Am2901NANDBasedAdapter.java rename to net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java index d75c139e..4e35762a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/Am2901NANDBasedAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java @@ -7,20 +7,20 @@ import net.mograsim.logic.core.components.gates.AndGate; import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; -import net.mograsim.logic.ui.model.components.Am2901NANDBased; +import net.mograsim.logic.ui.model.components.AtomicAm2901NANDBased; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.modeladapter.LogicModelParameters; -public class Am2901NANDBasedAdapter implements ComponentAdapter +public class AtomicAm2901NANDBasedAdapter implements ComponentAdapter { @Override - public Class getSupportedClass() + public Class getSupportedClass() { - return Am2901NANDBased.class; + return AtomicAm2901NANDBased.class; } @Override - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, Am2901NANDBased guiComponent, + public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, AtomicAm2901NANDBased guiComponent, Map logicWiresPerPin) { Wire w00 = logicWiresPerPin.get(guiComponent.getPins().get(0)); -- 2.17.1 From 996ddc75e1cbf99b266976b1c5827db75cc902be Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:23:32 +0200 Subject: [PATCH 11/16] Cleaned up ComponentAdapter interface --- .../logic/ui/modeladapter/ViewLogicModelAdapter.java | 5 ++--- .../componentadapters/AtomicAm2901NANDBasedAdapter.java | 4 +--- .../ui/modeladapter/componentadapters/BitDisplayAdapter.java | 4 +--- .../ui/modeladapter/componentadapters/ComponentAdapter.java | 4 +--- .../modeladapter/componentadapters/ManualSwitchAdapter.java | 4 +--- .../ui/modeladapter/componentadapters/SimpleGateAdapter.java | 4 ++-- 6 files changed, 8 insertions(+), 17 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index ad363d33..5a5ff658 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -10,7 +10,6 @@ import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.components.gates.AndGate; import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.core.components.gates.OrGate; @@ -157,12 +156,12 @@ public class ViewLogicModelAdapter } @SuppressWarnings("unchecked") - private static Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, + private static void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIComponent guiComponent, Map logicWiresPerPin, ComponentAdapter adapter) { if (adapter == null) throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass()); - return adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin); + adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin); } private ViewLogicModelAdapter() diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java index 4e35762a..e0080e79 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/AtomicAm2901NANDBasedAdapter.java @@ -2,7 +2,6 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.Map; -import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.components.gates.AndGate; import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.core.timeline.Timeline; @@ -20,7 +19,7 @@ public class AtomicAm2901NANDBasedAdapter implements ComponentAdapter logicWiresPerPin) { Wire w00 = logicWiresPerPin.get(guiComponent.getPins().get(0)); @@ -63,7 +62,6 @@ public class AtomicAm2901NANDBasedAdapter implements ComponentAdapter } @Override - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent, + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent, Map logicWiresPerPin) { ReadEnd end = logicWiresPerPin.get(guiComponent.getInputPin()).createReadOnlyEnd(); BitDisplay bitDisplay = new BitDisplay(timeline, end); guiComponent.setLogicModelBinding(bitDisplay); - return bitDisplay; } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java index 83b8dbbe..85cff71e 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ComponentAdapter.java @@ -2,7 +2,6 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.Map; -import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.ui.model.components.GUIComponent; @@ -13,6 +12,5 @@ public interface ComponentAdapter { public Class getSupportedClass(); - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, - Map logicWiresPerPin); + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin); } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java index c8db4888..ebfd9ff6 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/ManualSwitchAdapter.java @@ -2,7 +2,6 @@ package net.mograsim.logic.ui.modeladapter.componentadapters; import java.util.Map; -import net.mograsim.logic.core.components.Component; import net.mograsim.logic.core.components.ManualSwitch; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; @@ -20,12 +19,11 @@ public class ManualSwitchAdapter implements ComponentAdapter } @Override - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent, + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent, Map logicWiresPerPin) { ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd(); ManualSwitch manualSwitch = new ManualSwitch(timeline, end); guiComponent.setLogicModelBinding(manualSwitch, end); - return manualSwitch; } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java index b059e025..6645fbef 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/SimpleGateAdapter.java @@ -30,14 +30,14 @@ public class SimpleGateAdapter implements Co } @Override - public Component createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin) + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map logicWiresPerPin) { ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd(); List inputPins = guiComponent.getInputPins(); ReadEnd[] ins = new ReadEnd[inputPins.size()]; for (int i = 0; i < inputPins.size(); i++) ins[i] = logicWiresPerPin.get(inputPins.get(i)).createReadOnlyEnd(); - return constructor.newComponent(timeline, params.gateProcessTime, out, ins); + constructor.newComponent(timeline, params.gateProcessTime, out, ins); } public static interface ComponentConstructor -- 2.17.1 From 054e77aca4d4de146205ea64edd60923db5e23d9 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:28:02 +0200 Subject: [PATCH 12/16] Created GUINandGate --- .../ui/model/components/GUINandGate.java | 13 +++++++ .../modeladapter/ViewLogicModelAdapter.java | 2 ++ .../componentadapters/NandGateAdapter.java | 34 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java new file mode 100644 index 00000000..6f1e640a --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUINandGate.java @@ -0,0 +1,13 @@ +package net.mograsim.logic.ui.model.components; + +import net.mograsim.logic.ui.model.ViewModelModifiable; + +public class GUINandGate extends SimpleRectangularGUIGate +{ + public GUINandGate(ViewModelModifiable model, int logicWidth) + { + super(model, logicWidth, "&", true); + setInputCount(2);// TODO make variable + // TODO + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java index 5a5ff658..df3f9766 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/ViewLogicModelAdapter.java @@ -30,6 +30,7 @@ import net.mograsim.logic.ui.modeladapter.componentadapters.AtomicAm2901NANDBase import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.NandGateAdapter; import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter; public class ViewLogicModelAdapter @@ -41,6 +42,7 @@ public class ViewLogicModelAdapter componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new)); componentAdaptersModifiable.add(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o))); + componentAdaptersModifiable.add(new NandGateAdapter()); componentAdaptersModifiable.add(new ManualSwitchAdapter()); componentAdaptersModifiable.add(new BitDisplayAdapter()); componentAdaptersModifiable.add(new AtomicAm2901NANDBasedAdapter()); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java new file mode 100644 index 00000000..761689a3 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NandGateAdapter.java @@ -0,0 +1,34 @@ +package net.mograsim.logic.ui.modeladapter.componentadapters; + +import java.util.Map; + +import net.mograsim.logic.core.components.gates.AndGate; +import net.mograsim.logic.core.components.gates.NotGate; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.ui.model.components.GUINandGate; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; + +public class NandGateAdapter implements ComponentAdapter +{ + @Override + public Class getSupportedClass() + { + return GUINandGate.class; + } + + @Override + @SuppressWarnings("unused") // AndGate and NotGate + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUINandGate guiComponent, + Map logicWiresPerPin) + { + Wire i0 = logicWiresPerPin.get(guiComponent.getInputPins().get(0)); + Wire i1 = logicWiresPerPin.get(guiComponent.getInputPins().get(1)); + Wire o = logicWiresPerPin.get(guiComponent.getOutputPin()); + Wire w = new Wire(timeline, guiComponent.getOutputPin().logicWidth, 1); + + new AndGate(timeline, 1, w.createReadWriteEnd(), i0.createReadOnlyEnd(), i1.createReadOnlyEnd()); + new NotGate(timeline, Math.max(1, params.gateProcessTime - 2), w.createReadOnlyEnd(), o.createReadWriteEnd()); + } +} \ No newline at end of file -- 2.17.1 From e670d6ab4c81bfb65640333a3116ecb1357ad3fa Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:35:49 +0200 Subject: [PATCH 13/16] Improved SubmodelComponent rendering: Font for labels is now fixed --- .../logic/ui/model/components/SubmodelComponent.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index 4b67650b..eca0df69 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -8,6 +8,7 @@ import java.util.Map.Entry; import net.haspamelodica.swt.helper.gcs.GCDefaultConfig; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.gcs.TranslatedGC; +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.ui.LogicUIRenderer; @@ -149,8 +150,12 @@ public class SubmodelComponent extends GUIComponent gc.setAlpha(Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)))); renderer.render(tgc, visibleRegion.translate(posX, posY, submodelScale)); gc.setAlpha(Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))))); + Font oldFont = gc.getFont(); + Font labelFont = new Font(oldFont.getName(), 6, oldFont.getStyle()); + gc.setFont(labelFont); Point textExtent = gc.textExtent(label); gc.drawText(label, posX + (getBounds().width - textExtent.x) / 2, posY + (getBounds().height - textExtent.y) / 2, true); + gc.setFont(oldFont); conf.reset(gc); // draw the "bounding box" after all other operations to make interface pins look better gc.drawRectangle(getBounds()); -- 2.17.1 From 3400148c81a0f9713ecb09d9a2c4554a4c4c7d8d Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 3 Jun 2019 23:52:51 +0200 Subject: [PATCH 14/16] Implemented GUI_rsLatch --- .../ui/examples/ModularAm2901Example.java | 42 ++++++++++++++++ .../components/mi/nandbased/GUI_rsLatch.java | 50 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ModularAm2901Example.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ModularAm2901Example.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ModularAm2901Example.java new file mode 100644 index 00000000..3c731170 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/ModularAm2901Example.java @@ -0,0 +1,42 @@ +package net.mograsim.logic.ui.examples; + +import net.mograsim.logic.ui.SimpleLogicUIStandalone; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.components.GUIBitDisplay; +import net.mograsim.logic.ui.model.components.GUIManualSwitch; +import net.mograsim.logic.ui.model.components.SubmodelComponent; +import net.mograsim.logic.ui.model.components.mi.nandbased.GUI_rsLatch; +import net.mograsim.logic.ui.model.wires.GUIWire; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; + +public class ModularAm2901Example +{ + public static void main(String[] args) + { + LogicModelParameters params = new LogicModelParameters(); + params.gateProcessTime = 1; + params.wireTravelTime = 1; + SimpleLogicUIStandalone.executeVisualisation(ModularAm2901Example::createAm2901Example, params); + } + + @SuppressWarnings("unused") // for GUIWires being created + public static void createAm2901Example(ViewModelModifiable model) + { + SubmodelComponent comp = new GUI_rsLatch(model); + int inputCount = 2; + + comp.moveTo(100, 0); + for (int i = 0; i < inputCount; i++) + { + GUIManualSwitch sw = new GUIManualSwitch(model); + sw.moveTo(0, 20 * i); + new GUIWire(model, comp.getPins().get(i), sw.getOutputPin()); + } + for (int i = inputCount; i < comp.getPins().size(); i++) + { + GUIBitDisplay bd = new GUIBitDisplay(model); + bd.moveTo(200, 20 * (i - inputCount)); + new GUIWire(model, comp.getPins().get(i), bd.getInputPin()); + } + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java new file mode 100644 index 00000000..510becfa --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java @@ -0,0 +1,50 @@ +package net.mograsim.logic.ui.model.components.mi.nandbased; + +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.components.GUINandGate; +import net.mograsim.logic.ui.model.components.SubmodelComponent; +import net.mograsim.logic.ui.model.wires.GUIWire; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.model.wires.WireCrossPoint; + +public class GUI_rsLatch extends SubmodelComponent +{ + public GUI_rsLatch(ViewModelModifiable model) + { + super(model, "_rsLatch"); + setSize(35, 25); + setSubmodelScale(.2); + initSubmodelComponents(); + } + + @SuppressWarnings("unused") + private void initSubmodelComponents() + { + Pin _S = addSubmodelInterface(1, 0, 5); + Pin _R = addSubmodelInterface(1, 0, 20); + Pin Q = addSubmodelInterface(1, 35, 5); + Pin _Q = addSubmodelInterface(1, 35, 20); + + GUINandGate nand1 = new GUINandGate(submodelModifiable, 1); + nand1.moveTo(80, 20); + GUINandGate nand2 = new GUINandGate(submodelModifiable, 1); + nand2.moveTo(80, 85); + + WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1); + cp1.moveTo(120, 30); + WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1); + cp2.moveTo(120, 95); + + new GUIWire(submodelModifiable, _S, nand1.getInputPins().get(0)); + new GUIWire(submodelModifiable, _R, nand2.getInputPins().get(1)); + new GUIWire(submodelModifiable, nand1.getOutputPin(), cp1.getPin()); + new GUIWire(submodelModifiable, nand2.getOutputPin(), cp2.getPin()); + new GUIWire(submodelModifiable, cp1.getPin(), nand2.getInputPins().get(0), new Point(120, 50), new Point(60, 75), + new Point(60, 90)); + new GUIWire(submodelModifiable, cp2.getPin(), nand1.getInputPins().get(1), new Point(120, 75), new Point(60, 50), + new Point(60, 35)); + new GUIWire(submodelModifiable, cp1.getPin(), Q, new Point(150, 30), new Point(150, 25)); + new GUIWire(submodelModifiable, cp2.getPin(), _Q, new Point(150, 95), new Point(150, 100)); + } +} \ No newline at end of file -- 2.17.1 From b6807ba38574bccd122cd9414c883cd73ca61163 Mon Sep 17 00:00:00 2001 From: Christian Femers Date: Tue, 4 Jun 2019 03:52:04 +0200 Subject: [PATCH 15/16] Eclipse e4 and translation experiments --- net.mograsim.rcp/Application.e4xmi | 40 ++++++++++++------ net.mograsim.rcp/META-INF/MANIFEST.MF | 12 ++++-- .../OSGI-INF/l10n/bundle.properties | 18 +++++++- .../OSGI-INF/l10n/bundle_de.properties | 22 ++++++++++ net.mograsim.rcp/build.properties | 3 +- net.mograsim.rcp/icons/af.png | Bin 7657 -> 0 bytes net.mograsim.rcp/icons/embedded.png | Bin 7657 -> 0 bytes net.mograsim.rcp/icons/enterprise.png | Bin 7657 -> 0 bytes net.mograsim.rcp/icons/home.png | Bin 287 -> 0 bytes net.mograsim.rcp/icons/languages.png | Bin 7657 -> 0 bytes net.mograsim.rcp/icons/open_in_app.png | Bin 315 -> 0 bytes net.mograsim.rcp/icons/rcp.png | Bin 7657 -> 0 bytes net.mograsim.rcp/icons/save_edit.png | Bin 367 -> 0 bytes net.mograsim.rcp/plugin.xml | 32 +------------- .../mograsim/rcp/handlers/LangHandler.java | 22 ++++++++++ .../src/net/mograsim/rcp/i18n/Messages.java | 6 +++ .../net/mograsim/rcp/parts/SamplePart.java | 13 +++++- 17 files changed, 116 insertions(+), 52 deletions(-) create mode 100644 net.mograsim.rcp/OSGI-INF/l10n/bundle_de.properties delete mode 100644 net.mograsim.rcp/icons/af.png delete mode 100644 net.mograsim.rcp/icons/embedded.png delete mode 100644 net.mograsim.rcp/icons/enterprise.png delete mode 100644 net.mograsim.rcp/icons/home.png delete mode 100644 net.mograsim.rcp/icons/languages.png delete mode 100644 net.mograsim.rcp/icons/open_in_app.png delete mode 100644 net.mograsim.rcp/icons/rcp.png delete mode 100644 net.mograsim.rcp/icons/save_edit.png create mode 100644 net.mograsim.rcp/src/net/mograsim/rcp/handlers/LangHandler.java create mode 100644 net.mograsim.rcp/src/net/mograsim/rcp/i18n/Messages.java diff --git a/net.mograsim.rcp/Application.e4xmi b/net.mograsim.rcp/Application.e4xmi index 3caa9c19..1aa84444 100644 --- a/net.mograsim.rcp/Application.e4xmi +++ b/net.mograsim.rcp/Application.e4xmi @@ -1,23 +1,31 @@ - + - - + + - + - - - - + + + + - - + + + + + + + + + + @@ -31,6 +39,7 @@ + @@ -41,10 +50,13 @@ - - - - + + + + + + + diff --git a/net.mograsim.rcp/META-INF/MANIFEST.MF b/net.mograsim.rcp/META-INF/MANIFEST.MF index 1c5e2a77..cf712fe5 100644 --- a/net.mograsim.rcp/META-INF/MANIFEST.MF +++ b/net.mograsim.rcp/META-INF/MANIFEST.MF @@ -4,6 +4,10 @@ Bundle-Name: %Bundle-Name Bundle-SymbolicName: net.mograsim.rcp;singleton:=true Bundle-Version: 1.0.0.qualifier Bundle-Vendor: %Bundle-Vendor +Bundle-Localization: OSGI-INF/l10n/bundle +Export-Package: net.mograsim.rcp.handlers;uses:="org.eclipse.swt.widgets,org.eclipse.e4.ui.workbench,org.eclipse.e4.ui.workbench.modeling", + net.mograsim.rcp.parts;uses:="org.eclipse.swt.widgets", + net.mograsim.rcp.splashhandlers Require-Bundle: org.eclipse.core.runtime;bundle-version="3.15.200", org.eclipse.e4.ui.model.workbench;bundle-version="2.1.300", org.eclipse.jface;bundle-version="3.15.100", @@ -12,9 +16,9 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.15.200", org.eclipse.e4.ui.di;bundle-version="1.2.500", org.eclipse.ui.workbench;bundle-version="3.113.0", javax.annotation;bundle-version="1.2.0", - net.mograsim.logic.ui + net.mograsim.logic.ui, + org.eclipse.osgi.services;bundle-version="3.8.0", + org.eclipse.e4.core.services;bundle-version="2.1.400" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Automatic-Module-Name: Sample -Export-Package: net.mograsim.rcp.handlers;uses:="org.eclipse.swt.widgets,org.eclipse.e4.ui.workbench,org.eclipse.e4.ui.workbench.modeling", - net.mograsim.rcp.parts;uses:="org.eclipse.swt.widgets", - net.mograsim.rcp.splashhandlers +Import-Package: javax.inject;version="1.0.0" diff --git a/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties b/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties index e07734a8..11c4aaf3 100644 --- a/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties +++ b/net.mograsim.rcp/OSGI-INF/l10n/bundle.properties @@ -3,4 +3,20 @@ Bundle-Vendor = MYSELF Bundle-Name = Sample product.name = Sample extension-point.name = Splash Extensions -product.name.0 = Simulator WIP \ No newline at end of file +product.name = Simulator WIP +trimmedwindow.label.1 = Sample RCP4 +part.label.1 = Sample Part +part.label.2 = LogicUI part +part.label.3 = None +part.tooltip.1 = Something +menu.label.1 = File +handledmenuitem.label.1 = Open +handledmenuitem.label.2 = Save +handledmenuitem.label.3 = Quit +menu.label.2 = Help +handledmenuitem.label.4 = About +command.commandname.1 = quitCommand +command.commandname.2 = openCommand +command.commandname.3 = saveCommand +command.commandname.4 = aboutCommand +sample_part_input_hint = Enter text to mark part as dirty diff --git a/net.mograsim.rcp/OSGI-INF/l10n/bundle_de.properties b/net.mograsim.rcp/OSGI-INF/l10n/bundle_de.properties new file mode 100644 index 00000000..67bf1488 --- /dev/null +++ b/net.mograsim.rcp/OSGI-INF/l10n/bundle_de.properties @@ -0,0 +1,22 @@ +#Properties file for Sample +Bundle-Vendor = ICH +Bundle-Name = Beispiel +product.name = Beispiel +extension-point.name = Splash Extensions +product.name = Simulator WIP +trimmedwindow.label.1 = Beispiel RCP4 +part.label.1 = Sample Part +part.label.2 = LogicUI part +part.label.3 = Nix +part.tooltip.1 = Irgendwas +menu.label.1 = Datei +handledmenuitem.label.1 = Öffnen +handledmenuitem.label.2 = Speichern +handledmenuitem.label.3 = Schließen +menu.label.2 = Hilfe +handledmenuitem.label.4 = Über +command.commandname.1 = quitCommand +command.commandname.2 = openCommand +command.commandname.3 = saveCommand +command.commandname.4 = aboutCommand +sample_part_input_hint = ALKSKSKS diff --git a/net.mograsim.rcp/build.properties b/net.mograsim.rcp/build.properties index d1ae984b..7eb5b4a3 100644 --- a/net.mograsim.rcp/build.properties +++ b/net.mograsim.rcp/build.properties @@ -7,12 +7,11 @@ bin.includes = plugin.xml,\ css/,\ splash.bmp,\ schema/,\ - OSGI-INF/l10n/bundle.properties,\ OSGI-INF/ source.. = src/ src.includes = Application.e4xmi,\ - OSGI-INF/l10n/bundle.properties,\ css/,\ icons/,\ schema/,\ splash.bmp +javacProjectSettings = true diff --git a/net.mograsim.rcp/icons/af.png b/net.mograsim.rcp/icons/af.png deleted file mode 100644 index bcd0ce8a77e325d889cf22bee7e892eb5f1492f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7657 zcmeHLX;2i`8ttBiVFuavWdIch5W*&|C>f_g#LSH2# zV&2fu&_n+|Tw7av=FAyn5i3hesimd4xjB!=BS0Wh1x@n>0=ay+qM~97I3^5H$%t6B ztE)>UlPz7kR4f+5L>vwV4%-w8MMh?3aY+e)T3T98SYryezh^|OI668CfnT|D1)+gf zDvgYcgaY9REH*mI7!F^voyNvSf+XP(4h{}3E-rGpTp$prsi{o?5I5wdY?VOHzy1nc zL*3J-PhYTL;mC*_AfO>Gx3e@UISWGdM#jeL*RO|7@7}$8`0!y96O)4n4L38amVfHO2)ySlq&c6Kf<&QVd(Jd&rR zl|Z(A`*s+83dkl(9&UxO32A#S@-(-wkVqs53c%9b+M=Xs5LQ=P+t|<`AC@yBM}z(e z=A)^lRbE~m6&VHdi9`q{LfnG#DPY17{x{!zgFir%m6er~lY>Yd6%}>)@?{{fmC1N) z1cHrHQ&VTnnw6QEdFRd@$iKXz+|0~Oz~@tJ!*C@<;TC#A&_dwAV<1DY_4V~-y!92E z02AK0aU(G?!O*~v#YaU%L^wJ+9zA*l^R8MIjEBfG00FGk)zu*(Aqb~UO-*TOX)9Lv zbIWnGG5n2N9yWf=wwW_$j(e<9SAfOR)6FN38$&)#A<}ll57lt*BO-%4kWmQ!}Lj#^k#9}sxKF7tqhMS_| z;`;jfm2ATd5WskT;4zTF_3PIJ^41T-zn(GEcKo+vebUOx%EH28%a$!#T3Vn%p`aQY z8(Lag@DMZN34{VPj96I3K!VsJ>|$V`k0`2u7h)-{$6Tq(%E}!(c6fMrAU}>RgAU%h zaQ@tbYljz@Jzef99v-Go6uNEOA2|UxH-!K5&p-e4(@)66ZfD?o3WjLWPN%*v8ftp_y5o0r0$`xI<1v1iGJ_Bhk>%)zQJ1fCAF0 z9~~VH??cSIe?QmVeKw*ig0qv86PAHBQ4J?0T`DRnwzIS6@yN7Wx4;LaP4-dGNd}IXYt-9JeUmqW? zN&y;5sh||ps6qj1?`3Brgd!Zk^*C7E)zHuoK{ftTs)W}&S0;iVjU(wfpzdC3XoMCE zQSTCJJYud1^;=eE2TwXly@g4!Oh7;Yb_|C4dVB3;vXv{}5DEprF;;M)#)7R8w7k5$ zjE#*qY}kN&1@n!W5)sPev z#NY_MJ45YxVKaW0=tH(JN?BRiJMX;fz|yLLLQ(Kr4e`n0wj1S z9obAOl>+gJuUC1S+_cqheBDXZ+NlunNi{xLcy7Un+j8C6AK}rXHG}Pcx z3ZkHSw2*R`yb^-w;P&n9ZPwP-fQSuoYJk+nQZlrqA(0^3?c28xwKeht`T%t3&>>)o zi;Y!Rb~{;6zOMVWMJXHx=8$HKmbHO$!d z_SbN%{tl;@6457w?-yCx(ADh>+^Lv7=?Y#C!#On}CP zUG|F2peV&R*Z>aVDCgnY_Vx&PJU>6b&7XxwpZ(XHZelBafqay%Xd6w)SA4X}8D28x zDBP4UWsCb7k#qO%-8jXcIB^154@;wSJ}&O9x8CBaEQT$%fvdj${<6}Ns_Gi}!NrRg z-QAfVcgHs*36xKv?tL<2{e*gGR)Mg%=LSR-)-2L}fQ1ws2@=zrHk!4i4qG;-ZSPp?lt`2;8R3Du&iu(sq_PR-n1BrQx3#sQ!b9Sl6gT(&BpaGA5qAp& zj~*5vKrzEo-nhe}FH8k>E}9aUk$a7T_Dfutg%qADvZ zs;aB;gWJ}vUnV6bfA(2;M`zdI&>-9pETZI^GMX0yIdiCZEh;Knuwa3qfdOJ{Y-}ty z3fUS5TI2)#R)gXjAzsDVe&@A6_QV%EV0-vo2>}V(N8aGRg6NZzlTjDpcJboHs7IJ& z_2=3v!}@c}sXAI!ZK*on|LMKIVZ92Gf3x)}Y<&^!P`c0c+qKM?6@GzBFZsN;_rJm= BLuLQ~ diff --git a/net.mograsim.rcp/icons/embedded.png b/net.mograsim.rcp/icons/embedded.png deleted file mode 100644 index 57edc6a188fec321808baa8e25bc345ccf15e5fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7657 zcmb`MOKcri8OP`Syf54F8{3UZLehv1k|zsAtaUvHb}5w0}|}IWLd

%aU<2t=H>qZfynKU~=-z{QSJkloO9JBxmM% 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 bu!4Eh6VIQP`W^v5cQSao`njxgN@xNA+l6XM diff --git a/net.mograsim.rcp/icons/languages.png b/net.mograsim.rcp/icons/languages.png deleted file mode 100644 index 98af2daff485f05f3a79d3d424eda36aceb30cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7657 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 Sc#@`a=GC*OzMK8v%YOkB)~hT4 diff --git a/net.mograsim.rcp/icons/save_edit.png b/net.mograsim.rcp/icons/save_edit.png deleted file mode 100644 index b17caf5a984540e8b1448057feeecc5183c58eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR45}niK43oDoay_VY{~%!TkJHeT zagA#4?Mv_MdONO8`@-c@C42nbRn8AP_!%B-iNCC}_SPK1!YP-t4+zZom)=sle}nLc z$hr2+`x<6XxumevgyEgm+wiZ&N*@$5cV5+3iDlUACp_b(m9qWQJ&_JBb5fstKF9DN z>{9C89lu2j<{Do+ePv5${#Dzoiu+$0EI(XKkl5OKHs>F&{AoMO<{t+vf&OOjboFyt I=akR{0M|T{IRF3v diff --git a/net.mograsim.rcp/plugin.xml b/net.mograsim.rcp/plugin.xml index a22663bd..7c2dac5f 100644 --- a/net.mograsim.rcp/plugin.xml +++ b/net.mograsim.rcp/plugin.xml @@ -8,14 +8,14 @@ point="org.eclipse.core.runtime.products"> + name="%product.name"> + value="%product.name"> - - - - - - - - - - - - diff --git a/net.mograsim.rcp/src/net/mograsim/rcp/handlers/LangHandler.java b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/LangHandler.java new file mode 100644 index 00000000..f009a9bd --- /dev/null +++ b/net.mograsim.rcp/src/net/mograsim/rcp/handlers/LangHandler.java @@ -0,0 +1,22 @@ + +package net.mograsim.rcp.handlers; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.services.nls.ILocaleChangeService; + +public class LangHandler +{ + + @Inject + ILocaleChangeService lcs; + + @Execute + public void execute(@Named("change_lang_locale") String change_lang_locale) + { + lcs.changeApplicationLocale(change_lang_locale); + } + +} \ No newline at end of file diff --git a/net.mograsim.rcp/src/net/mograsim/rcp/i18n/Messages.java b/net.mograsim.rcp/src/net/mograsim/rcp/i18n/Messages.java new file mode 100644 index 00000000..fb9e5855 --- /dev/null +++ b/net.mograsim.rcp/src/net/mograsim/rcp/i18n/Messages.java @@ -0,0 +1,6 @@ +package net.mograsim.rcp.i18n; + +public class Messages +{ + public String sample_part_input_hint; +} diff --git a/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java b/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java index 0bbe8aac..fde7162c 100644 --- a/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java +++ b/net.mograsim.rcp/src/net/mograsim/rcp/parts/SamplePart.java @@ -6,6 +6,7 @@ import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; +import org.eclipse.e4.core.services.nls.Translation; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.Persist; import org.eclipse.e4.ui.model.application.ui.basic.MPart; @@ -17,10 +18,13 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; +import net.mograsim.rcp.i18n.Messages; + public class SamplePart { private TableViewer tableViewer; + private Text txtInput; @Inject private MPart part; @@ -30,7 +34,7 @@ public class SamplePart { parent.setLayout(new GridLayout(1, false)); - Text txtInput = new Text(parent, SWT.BORDER); + txtInput = new Text(parent, SWT.BORDER); txtInput.setMessage("Enter text to mark part as dirty"); txtInput.addModifyListener(e -> part.setDirty(true)); txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); @@ -58,4 +62,11 @@ public class SamplePart { return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); } + + @Inject + public void translate(@Translation Messages m) + { + if (txtInput != null && !txtInput.isDisposed()) + txtInput.setMessage(m.sample_part_input_hint); + } } \ No newline at end of file -- 2.17.1 From b49b71ffd58b0e35c46f8f31c0bdb0016a8bb724 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Tue, 4 Jun 2019 07:05:40 +0200 Subject: [PATCH 16/16] Made comments about @SuppressWarnings uniform --- .../src/net/mograsim/logic/ui/examples/SubmodelExample.java | 2 +- .../logic/ui/model/components/TestSubmodelNANDComponent.java | 2 +- .../logic/ui/model/components/mi/nandbased/GUI_rsLatch.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java index 3cba4db7..e4b515a9 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/SubmodelExample.java @@ -14,7 +14,7 @@ public class SubmodelExample SimpleLogicUIStandalone.executeVisualisation(SubmodelExample::createSubmodelExample); } - @SuppressWarnings("unused") // GUIWires being created + @SuppressWarnings("unused") // for GUIWires being created public static void createSubmodelExample(ViewModelModifiable model) { GUIManualSwitch swA = new GUIManualSwitch(model); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java index d1ce89a7..0c84f4f5 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TestSubmodelNANDComponent.java @@ -14,7 +14,7 @@ public class TestSubmodelNANDComponent extends SubmodelComponent initSubmodelComponents(); } - @SuppressWarnings("unused") // GUIWires being created + @SuppressWarnings("unused") // for GUIWires being created private void initSubmodelComponents() { Pin A = addSubmodelInterface(1, 0, 5); diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java index 510becfa..589bd8fa 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java @@ -18,7 +18,7 @@ public class GUI_rsLatch extends SubmodelComponent initSubmodelComponents(); } - @SuppressWarnings("unused") + @SuppressWarnings("unused") // for GUIWires being created private void initSubmodelComponents() { Pin _S = addSubmodelInterface(1, 0, 5); -- 2.17.1