From fd0bb0a5763fc509e4d168097ef59b8a5fcd7814 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 19 Mar 2016 09:24:44 +0100 Subject: [PATCH] added a probe, simplified outputs --- .../java/de/neemann/digital/core/io/LED.java | 35 ----------------- .../java/de/neemann/digital/core/io/Out.java | 9 +++++ .../core/part/PartTypeDescription.java | 6 ++- .../digital/gui/draw/library/PartLibrary.java | 6 +-- .../digital/gui/draw/model/ModelEntry.java | 4 +- .../digital/gui/draw/parts/VisualPart.java | 9 +++++ .../digital/gui/draw/shapes/ProbeShape.java | 39 +++++++++++++++++++ .../digital/gui/draw/shapes/ShapeFactory.java | 6 +-- 8 files changed, 70 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/de/neemann/digital/core/io/LED.java create mode 100644 src/main/java/de/neemann/digital/gui/draw/shapes/ProbeShape.java diff --git a/src/main/java/de/neemann/digital/core/io/LED.java b/src/main/java/de/neemann/digital/core/io/LED.java deleted file mode 100644 index 65324e5c8..000000000 --- a/src/main/java/de/neemann/digital/core/io/LED.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.neemann.digital.core.io; - -import de.neemann.digital.core.Model; -import de.neemann.digital.core.NodeException; -import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.part.AttributeKey; -import de.neemann.digital.core.part.Part; -import de.neemann.digital.core.part.PartAttributes; -import de.neemann.digital.core.part.PartTypeDescription; - -/** - * @author hneemann - */ -public class LED implements Part { - - public static final PartTypeDescription DESCRIPTION = new PartTypeDescription(LED.class, "in") - .addAttribute(AttributeKey.Label) - .addAttribute(AttributeKey.Color); - - public LED(PartAttributes attributes) { - } - - @Override - public void setInputs(ObservableValue... inputs) throws NodeException { - } - - @Override - public ObservableValue[] getOutputs() { - return new ObservableValue[0]; - } - - @Override - public void registerNodes(Model model) { - } -} diff --git a/src/main/java/de/neemann/digital/core/io/Out.java b/src/main/java/de/neemann/digital/core/io/Out.java index 035792a3c..c7090f9ff 100644 --- a/src/main/java/de/neemann/digital/core/io/Out.java +++ b/src/main/java/de/neemann/digital/core/io/Out.java @@ -17,6 +17,15 @@ public class Out implements Part { .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.Label); + public static final PartTypeDescription PROBEDESCRIPTION = new PartTypeDescription("Probe", Out.class, "in") + .addAttribute(AttributeKey.Bits) + .addAttribute(AttributeKey.Label); + + public static final PartTypeDescription LEDDESCRIPTION = new PartTypeDescription("LED", Out.class, "in") + .addAttribute(AttributeKey.Label) + .addAttribute(AttributeKey.Color); + + private ObservableValue value; public Out(PartAttributes attributes) { diff --git a/src/main/java/de/neemann/digital/core/part/PartTypeDescription.java b/src/main/java/de/neemann/digital/core/part/PartTypeDescription.java index e9178006f..7c5c2f22d 100644 --- a/src/main/java/de/neemann/digital/core/part/PartTypeDescription.java +++ b/src/main/java/de/neemann/digital/core/part/PartTypeDescription.java @@ -17,7 +17,11 @@ public class PartTypeDescription { private final ArrayList attributeList; public PartTypeDescription(Class clazz, String... inputNames) { - this(clazz.getSimpleName(), new PartFactory() { + this(clazz.getSimpleName(), clazz, inputNames); + } + + public PartTypeDescription(String name, Class clazz, String... inputNames) { + this(name, new PartFactory() { @Override public Part create(PartAttributes attributes) { try { diff --git a/src/main/java/de/neemann/digital/gui/draw/library/PartLibrary.java b/src/main/java/de/neemann/digital/gui/draw/library/PartLibrary.java index 09835e9be..f6a42c07b 100644 --- a/src/main/java/de/neemann/digital/gui/draw/library/PartLibrary.java +++ b/src/main/java/de/neemann/digital/gui/draw/library/PartLibrary.java @@ -10,7 +10,6 @@ import de.neemann.digital.core.flipflops.RS_FF; import de.neemann.digital.core.flipflops.T_FF; import de.neemann.digital.core.io.Const; import de.neemann.digital.core.io.In; -import de.neemann.digital.core.io.LED; import de.neemann.digital.core.io.Out; import de.neemann.digital.core.part.PartTypeDescription; import de.neemann.digital.core.wiring.Delay; @@ -38,9 +37,10 @@ public class PartLibrary implements Iterable { add(Delay.DESCRIPTION, "Logic"); add(In.DESCRIPTION, "IO"); - add(Out.DESCRIPTION, "IO"); add(Const.DESCRIPTION, "IO"); - add(LED.DESCRIPTION, "IO"); + add(Out.DESCRIPTION, "IO"); + add(Out.LEDDESCRIPTION, "IO"); + add(Out.PROBEDESCRIPTION, "IO"); add(RS_FF.DESCRIPTION, "FlipFlops"); add(JK_FF.DESCRIPTION, "FlipFlops"); diff --git a/src/main/java/de/neemann/digital/gui/draw/model/ModelEntry.java b/src/main/java/de/neemann/digital/gui/draw/model/ModelEntry.java index 82f444072..bf8fef5cd 100644 --- a/src/main/java/de/neemann/digital/gui/draw/model/ModelEntry.java +++ b/src/main/java/de/neemann/digital/gui/draw/model/ModelEntry.java @@ -33,11 +33,11 @@ public class ModelEntry { for (int i = 0; i < inputNames.length; i++) { Pin pin = ins.get(inputNames[i]); if (pin == null) - throw new PinException("pin " + inputNames[i] + " not found!"); + throw new PinException("pin '" + inputNames[i] + "' at " + visualPart + " not found!"); ObservableValue value = pin.getValue(); if (value == null) - throw new PinException("no value set for " + inputNames[i] + "!"); + throw new PinException("no value set for '" + inputNames[i] + "' at " + visualPart + "!"); inputs[i] = value; } diff --git a/src/main/java/de/neemann/digital/gui/draw/parts/VisualPart.java b/src/main/java/de/neemann/digital/gui/draw/parts/VisualPart.java index cc23029a3..2126dd1f8 100644 --- a/src/main/java/de/neemann/digital/gui/draw/parts/VisualPart.java +++ b/src/main/java/de/neemann/digital/gui/draw/parts/VisualPart.java @@ -165,4 +165,13 @@ public class VisualPart implements Drawable, Moveable, AttributeListener { shape = null; minMax = null; } + + @Override + public String toString() { + String lab = partAttributes.get(AttributeKey.Label); + if (lab != null && lab.length() > 0) + return partName + "(" + lab + ")"; + else + return partName; + } } \ No newline at end of file diff --git a/src/main/java/de/neemann/digital/gui/draw/shapes/ProbeShape.java b/src/main/java/de/neemann/digital/gui/draw/shapes/ProbeShape.java new file mode 100644 index 000000000..0209e4244 --- /dev/null +++ b/src/main/java/de/neemann/digital/gui/draw/shapes/ProbeShape.java @@ -0,0 +1,39 @@ +package de.neemann.digital.gui.draw.shapes; + +import de.neemann.digital.core.Listener; +import de.neemann.digital.core.Model; +import de.neemann.digital.gui.draw.graphics.Graphic; +import de.neemann.digital.gui.draw.graphics.Orientation; +import de.neemann.digital.gui.draw.graphics.Style; +import de.neemann.digital.gui.draw.graphics.Vector; +import de.neemann.digital.gui.draw.parts.Pin; +import de.neemann.digital.gui.draw.parts.Pins; +import de.neemann.digital.gui.draw.parts.State; + +/** + * @author hneemann + */ +public class ProbeShape implements Shape { + + + private final String label; + + public ProbeShape(String label) { + this.label = label; + } + + @Override + public Pins getPins() { + return new Pins().add(new Pin(new Vector(0, 0), "in", Pin.Direction.input)); + } + + @Override + public Interactor applyStateMonitor(State state, Listener listener, Model model) { + return null; + } + + @Override + public void drawTo(Graphic graphic, State state) { + graphic.drawText(new Vector(2, -1), new Vector(3, -1), label, Orientation.LEFTBOTTOM, Style.NORMAL); + } +} diff --git a/src/main/java/de/neemann/digital/gui/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/gui/draw/shapes/ShapeFactory.java index 78b3b7750..2bf79a856 100644 --- a/src/main/java/de/neemann/digital/gui/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/gui/draw/shapes/ShapeFactory.java @@ -7,7 +7,6 @@ import de.neemann.digital.core.arithmetic.Sub; import de.neemann.digital.core.basic.*; import de.neemann.digital.core.io.Const; import de.neemann.digital.core.io.In; -import de.neemann.digital.core.io.LED; import de.neemann.digital.core.io.Out; import de.neemann.digital.core.part.AttributeKey; import de.neemann.digital.core.part.PartAttributes; @@ -42,9 +41,10 @@ public final class ShapeFactory { map.put(In.DESCRIPTION.getName(), attr -> new InputShape(attr.get(AttributeKey.Bits), attr.get(AttributeKey.Label))); - map.put(Out.DESCRIPTION.getName(), attr -> new OutputShape(attr.get(AttributeKey.Bits), attr.get(AttributeKey.Label))); map.put(Const.DESCRIPTION.getName(), attr -> new ConstShape(attr.get(AttributeKey.Value))); - map.put(LED.DESCRIPTION.getName(), attr -> new LEDShape(attr.get(AttributeKey.Label), attr.get(AttributeKey.Color))); + map.put(Out.DESCRIPTION.getName(), attr -> new OutputShape(attr.get(AttributeKey.Bits), attr.get(AttributeKey.Label))); + map.put(Out.LEDDESCRIPTION.getName(), attr -> new LEDShape(attr.get(AttributeKey.Label), attr.get(AttributeKey.Color))); + map.put(Out.PROBEDESCRIPTION.getName(), attr -> new ProbeShape(attr.get(AttributeKey.Label))); } public PartLibrary setLibrary(PartLibrary library) {