From 0181ba72d377334f72f564c0949da421d59aada5 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 15 Apr 2016 15:58:16 +0200 Subject: [PATCH] changed creating of inputs and outputs by the shapes. --- .../neemann/digital/core/ObservableValue.java | 7 ++-- .../de/neemann/digital/core/basic/FanIn.java | 2 +- .../core/element/ElementTypeDescription.java | 18 +++++++--- .../digital/core/memory/LookUpTable.java | 2 +- .../neemann/digital/core/wiring/Decoder.java | 4 ++- .../digital/core/wiring/Demultiplexer.java | 5 ++- .../neemann/digital/core/wiring/Driver.java | 4 ++- .../digital/core/wiring/Multiplexer.java | 4 +-- .../neemann/digital/core/wiring/Splitter.java | 2 +- .../digital/draw/model/ModelDescription.java | 2 +- .../digital/draw/shapes/BreakShape.java | 9 ++--- .../digital/draw/shapes/ButtonShape.java | 8 +++-- .../digital/draw/shapes/ClockShape.java | 8 +++-- .../digital/draw/shapes/ConstShape.java | 9 ++--- .../digital/draw/shapes/DataShape.java | 3 +- .../digital/draw/shapes/DemuxerShape.java | 21 ++++++----- .../digital/draw/shapes/DriverShape.java | 15 ++++---- .../digital/draw/shapes/InputShape.java | 8 +++-- .../neemann/digital/draw/shapes/LEDShape.java | 8 +++-- .../digital/draw/shapes/MuxerShape.java | 25 +++++++------ .../digital/draw/shapes/OutputShape.java | 9 ++--- .../digital/draw/shapes/ProbeShape.java | 9 ++--- .../digital/draw/shapes/ResetShape.java | 8 +++-- .../digital/draw/shapes/SevenSegHexShape.java | 10 +++--- .../digital/draw/shapes/SevenSegShape.java | 22 ++++++------ .../de/neemann/digital/draw/shapes/Shape.java | 3 ++ .../digital/draw/shapes/ShapeFactory.java | 36 +++++++++---------- .../digital/draw/shapes/SplitterShape.java | 6 ++-- .../digital/draw/shapes/TextShape.java | 3 +- src/main/resources/lang/lang_de.properties | 6 ++++ 30 files changed, 167 insertions(+), 109 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/ObservableValue.java b/src/main/java/de/neemann/digital/core/ObservableValue.java index df664e3cb..7f9b7e32b 100644 --- a/src/main/java/de/neemann/digital/core/ObservableValue.java +++ b/src/main/java/de/neemann/digital/core/ObservableValue.java @@ -15,7 +15,7 @@ public class ObservableValue extends Observable implements PinDescription { private long value; private boolean highZ; private boolean bidirectional; - private String description = ""; + private String description; /** * Creates a new instance @@ -251,7 +251,10 @@ public class ObservableValue extends Observable implements PinDescription { @Override public String getDescription() { - return description; + if (description != null) + return description; + else + return getName(); } public ObservableValue setDescription(String description) { diff --git a/src/main/java/de/neemann/digital/core/basic/FanIn.java b/src/main/java/de/neemann/digital/core/basic/FanIn.java index 3473f4d51..e7c87abb1 100644 --- a/src/main/java/de/neemann/digital/core/basic/FanIn.java +++ b/src/main/java/de/neemann/digital/core/basic/FanIn.java @@ -57,7 +57,7 @@ public abstract class FanIn extends Node implements Element { } @Override - public PinDescription[] getInputNames(ElementAttributes elementAttributes) { + public PinDescription[] getInputDescription(ElementAttributes elementAttributes) { int count = elementAttributes.get(AttributeKey.InputCount); PinDescription[] names = new PinDescription[count]; for (int i = 0; i < count; i++) diff --git a/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java b/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java index 5bc9a8ee9..9dfa5cb0f 100644 --- a/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java +++ b/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java @@ -164,20 +164,30 @@ public class ElementTypeDescription { } /** - * Returns the names of the inputs which are needed by this element. + * Returns the description of the inputs which are needed by this element. * If you need a list of outputs names you can create a element using createElement() * and request the outputs by calling the elements getOutputs() method. * The you get an array of ObservableNames, and ObservableName has a - * field name. + * field name. Or call the getOutputDescription method. * * @param elementAttributes the elements attributes - * @return the list of input names + * @return the list of input descriptions * @throws NodeException NodeException */ - public PinDescription[] getInputNames(ElementAttributes elementAttributes) throws NodeException { + public PinDescription[] getInputDescription(ElementAttributes elementAttributes) throws NodeException { return inputPins; } + /** + * Returns the output pin descriptions of this element. + * + * @param elementAttributes the elements attributs + * @return the list of input descriptions + */ + public PinDescription[] getOutputDescriptions(ElementAttributes elementAttributes) { + return elementFactory.create(elementAttributes).getOutputs(); + } + /** * Creates a element of this type * diff --git a/src/main/java/de/neemann/digital/core/memory/LookUpTable.java b/src/main/java/de/neemann/digital/core/memory/LookUpTable.java index 8e63a60b4..1cd2e3cfe 100644 --- a/src/main/java/de/neemann/digital/core/memory/LookUpTable.java +++ b/src/main/java/de/neemann/digital/core/memory/LookUpTable.java @@ -19,7 +19,7 @@ public class LookUpTable extends Node implements Element { */ public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(LookUpTable.class) { @Override - public PinDescription[] getInputNames(ElementAttributes elementAttributes) { + public PinDescription[] getInputDescription(ElementAttributes elementAttributes) { int size = elementAttributes.get(AttributeKey.InputCount); PinDescription[] names = new PinDescription[size]; for (int i = 0; i < size; i++) diff --git a/src/main/java/de/neemann/digital/core/wiring/Decoder.java b/src/main/java/de/neemann/digital/core/wiring/Decoder.java index 521dd4925..74ddc3168 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Decoder.java +++ b/src/main/java/de/neemann/digital/core/wiring/Decoder.java @@ -7,6 +7,7 @@ import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.ElementTypeDescription; +import de.neemann.digital.lang.Lang; import static de.neemann.digital.core.element.PinInfo.input; @@ -24,7 +25,8 @@ public class Decoder extends Node implements Element { private int oldSelectorValue; private int selectorValue; - public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Decoder.class, input("sel")) + public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Decoder.class, + input("sel", Lang.get("elem_Decode_pin_sel"))) .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.SelectorBits) .addAttribute(AttributeKey.FlipSelPositon) diff --git a/src/main/java/de/neemann/digital/core/wiring/Demultiplexer.java b/src/main/java/de/neemann/digital/core/wiring/Demultiplexer.java index ef7bbd1e6..701b98099 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Demultiplexer.java +++ b/src/main/java/de/neemann/digital/core/wiring/Demultiplexer.java @@ -7,6 +7,7 @@ import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.ElementTypeDescription; +import de.neemann.digital.lang.Lang; import static de.neemann.digital.core.element.PinInfo.input; @@ -27,7 +28,9 @@ public class Demultiplexer extends Node implements Element { private int selectorValue; private long value; - public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Demultiplexer.class, input("sel"), input("in")) + public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Demultiplexer.class, + input("sel", Lang.get("elem_Demultiplexer_pin_sel")), + input("in")) .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.SelectorBits) diff --git a/src/main/java/de/neemann/digital/core/wiring/Driver.java b/src/main/java/de/neemann/digital/core/wiring/Driver.java index c289312c4..cf9694288 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Driver.java +++ b/src/main/java/de/neemann/digital/core/wiring/Driver.java @@ -15,7 +15,9 @@ import static de.neemann.digital.core.element.PinInfo.input; */ public class Driver extends Node implements Element { - public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Driver.class, input("in"), input("sel")) + public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Driver.class, + input("in"), + input("sel")) .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.FlipSelPositon); diff --git a/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java b/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java index db74c6931..decba9707 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java +++ b/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java @@ -25,10 +25,10 @@ public class Multiplexer extends FanIn { public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Multiplexer.class) { @Override - public PinDescription[] getInputNames(ElementAttributes elementAttributes) { + public PinDescription[] getInputDescription(ElementAttributes elementAttributes) { int size = 1 << elementAttributes.get(AttributeKey.SelectorBits); PinDescription[] names = new PinDescription[size + 1]; - names[0] = input("sel"); + names[0] = input("sel", Lang.get("elem_Multiplexer_pin_sel")); for (int i = 0; i < size; i++) names[i + 1] = input("in_" + i); return names; diff --git a/src/main/java/de/neemann/digital/core/wiring/Splitter.java b/src/main/java/de/neemann/digital/core/wiring/Splitter.java index 3f7fcf74d..9334d3f18 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Splitter.java +++ b/src/main/java/de/neemann/digital/core/wiring/Splitter.java @@ -33,7 +33,7 @@ public class Splitter implements Element { } @Override - public PinDescription[] getInputNames(ElementAttributes elementAttributes) throws BitsException { + public PinDescription[] getInputDescription(ElementAttributes elementAttributes) throws BitsException { Ports p = new Ports(elementAttributes.get(AttributeKey.InputSplit)); return p.getNames(PinDescription.Direction.input); } diff --git a/src/main/java/de/neemann/digital/draw/model/ModelDescription.java b/src/main/java/de/neemann/digital/draw/model/ModelDescription.java index 6de140a6f..a60454519 100644 --- a/src/main/java/de/neemann/digital/draw/model/ModelDescription.java +++ b/src/main/java/de/neemann/digital/draw/model/ModelDescription.java @@ -104,7 +104,7 @@ public class ModelDescription implements Iterable { } if (isNotAIO) - entries.add(new ModelEntry(element, pins, ve, elementType.getInputNames(ve.getElementAttributes()), isNestedCircuit)); + entries.add(new ModelEntry(element, pins, ve, elementType.getInputDescription(ve.getElementAttributes()), isNestedCircuit)); for (Pin p : pins) netList.add(p); diff --git a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java index 8cb5665fa..5ed426d2d 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java @@ -2,6 +2,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -10,8 +11,6 @@ import de.neemann.digital.draw.graphics.Orientation; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; - /** * @author hneemann */ @@ -22,14 +21,16 @@ public class BreakShape implements Shape { private static final Vector D1 = new Vector(SIZEQ, -SIZEQ); private static final Vector D2 = new Vector(SIZEQ, SIZEQ); private final String label; + private final PinDescription[] inputs; - public BreakShape(ElementAttributes attr) { + public BreakShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), input("brk"))); + return new Pins().add(new Pin(new Vector(0, 0), inputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java index aedbf320d..b9df862dc 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java @@ -4,6 +4,7 @@ import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -13,7 +14,6 @@ import de.neemann.digital.gui.components.CircuitComponent; import java.awt.*; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.OutputShape.SIZE; /** @@ -24,15 +24,17 @@ public class ButtonShape implements Shape { private static final int HEIGHT = SIZE / 2; private final String label; + private final PinDescription[] outputs; private IOState ioState; - public ButtonShape(ElementAttributes attr) { + public ButtonShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.outputs = outputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), output("out"))); + return new Pins().add(new Pin(new Vector(0, 0), outputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java index 6e10bafcb..59b000f5e 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java @@ -4,6 +4,7 @@ import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -13,7 +14,6 @@ import de.neemann.digital.gui.components.CircuitComponent; import java.awt.*; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.OutputShape.SIZE; /** @@ -24,19 +24,21 @@ public class ClockShape implements Shape { private static final Vector POS = new Vector(-SIZE - WI * 2, WI); private final String label; + private final PinDescription[] outputs; /** * Creates a new instance * * @param attr */ - public ClockShape(ElementAttributes attr) { + public ClockShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.outputs = outputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), output("C"))); + return new Pins().add(new Pin(new Vector(0, 0), outputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java index 5837b174e..2ad4a29c0 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java @@ -4,6 +4,7 @@ import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -12,22 +13,22 @@ import de.neemann.digital.draw.graphics.Orientation; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.output; - /** * @author hneemann */ public class ConstShape implements Shape { + private final PinDescription[] outputs; private String value; - public ConstShape(ElementAttributes attr) { + public ConstShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.outputs = outputs; this.value = ObservableValue.getHexString(attr.get(AttributeKey.Value)); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), output("out"))); + return new Pins().add(new Pin(new Vector(0, 0), outputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java index 1a49dcdeb..2ff94c757 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java @@ -6,6 +6,7 @@ import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.Graphic; @@ -30,7 +31,7 @@ public class DataShape implements Shape { private final int maxSize; private DataSet dataSet; - public DataShape(ElementAttributes attr) { + public DataShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { if (attr.get(AttributeKey.MicroStep)) type = ModelEvent.MICROSTEP; else diff --git a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java index 18c5c7517..33f7dfba6 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java @@ -3,13 +3,12 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.*; -import static de.neemann.digital.core.element.PinInfo.input; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.GenericShape.SIZE; /** @@ -20,12 +19,16 @@ public class DemuxerShape implements Shape { private final boolean hasInput; private final boolean flip; private final int height; + private final PinDescription[] inputs; + private final PinDescription[] outputs; private Pins pins; - public DemuxerShape(ElementAttributes attr, boolean hasInput) { - this.hasInput = hasInput; + public DemuxerShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; + this.outputs = outputs; this.flip = attr.get(AttributeKey.FlipSelPositon); outputCount = 1 << attr.get(AttributeKey.SelectorBits); + hasInput = inputs.length > 1; height = hasInput || (outputCount <= 2) ? outputCount * SIZE : (outputCount - 1) * SIZE; } @@ -33,16 +36,16 @@ public class DemuxerShape implements Shape { public Pins getPins() { if (pins == null) { pins = new Pins(); - pins.add(new Pin(new Vector(SIZE, flip ? 0 : height), input("sel"))); + pins.add(new Pin(new Vector(SIZE, flip ? 0 : height), inputs[0])); if (outputCount == 2) { - pins.add(new Pin(new Vector(SIZE * 2, 0 * SIZE), output("out_0"))); - pins.add(new Pin(new Vector(SIZE * 2, 2 * SIZE), output("out_1"))); + pins.add(new Pin(new Vector(SIZE * 2, 0 * SIZE), outputs[0])); + pins.add(new Pin(new Vector(SIZE * 2, 2 * SIZE), outputs[1])); } else for (int i = 0; i < outputCount; i++) { - pins.add(new Pin(new Vector(SIZE * 2, i * SIZE), output("out_" + i))); + pins.add(new Pin(new Vector(SIZE * 2, i * SIZE), outputs[i])); } if (hasInput) - pins.add(new Pin(new Vector(0, (outputCount / 2) * SIZE), input("in"))); + pins.add(new Pin(new Vector(0, (outputCount / 2) * SIZE), inputs[1])); } return pins; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java index 1b8b05ec5..54113e9d5 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java @@ -3,6 +3,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -11,8 +12,6 @@ import de.neemann.digital.draw.graphics.Polygon; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.GenericShape.SIZE; import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; @@ -21,9 +20,13 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; */ public class DriverShape implements Shape { private final boolean bottom; + private final PinDescription[] inputs; + private final PinDescription[] outputs; private Pins pins; - public DriverShape(ElementAttributes attr) { + public DriverShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; + this.outputs = outputs; this.bottom = attr.get(AttributeKey.FlipSelPositon); } @@ -31,9 +34,9 @@ public class DriverShape implements Shape { public Pins getPins() { if (pins == null) { pins = new Pins(); - pins.add(new Pin(new Vector(-SIZE, 0), input("in"))); - pins.add(new Pin(new Vector(0, bottom ? SIZE : -SIZE), input("sel"))); - pins.add(new Pin(new Vector(SIZE, 0), output("out"))); + pins.add(new Pin(new Vector(-SIZE, 0), inputs[0])); + pins.add(new Pin(new Vector(0, bottom ? SIZE : -SIZE), inputs[1])); + pins.add(new Pin(new Vector(SIZE, 0), outputs[0])); } return pins; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java index 1d20015cf..eec97cdee 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java @@ -4,6 +4,7 @@ import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -14,7 +15,6 @@ import de.neemann.digital.gui.components.SingleValueDialog; import java.awt.*; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.OutputShape.RAD; import static de.neemann.digital.draw.shapes.OutputShape.SIZE; @@ -24,15 +24,17 @@ import static de.neemann.digital.draw.shapes.OutputShape.SIZE; public class InputShape implements Shape { private final String label; + private final PinDescription[] outputs; private IOState ioState; - public InputShape(ElementAttributes attr) { + public InputShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.outputs = outputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), output("out"))); + return new Pins().add(new Pin(new Vector(0, 0), outputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java index 815a2043f..14c5d1977 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java @@ -4,6 +4,7 @@ import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -12,7 +13,6 @@ import de.neemann.digital.draw.graphics.Orientation; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; import static de.neemann.digital.draw.shapes.OutputShape.SIZE; /** @@ -22,17 +22,19 @@ public class LEDShape implements Shape { private static final Vector RAD = new Vector(SIZE - 2, SIZE - 2); private static final Vector RADL = new Vector(SIZE, SIZE); private final String label; + private final PinDescription[] inputs; private Style onStyle; private IOState ioState; - public LEDShape(ElementAttributes attr) { + public LEDShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; this.label = attr.getLabel(); onStyle = new Style(1, true, attr.get(AttributeKey.Color)); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), input("in"))); + return new Pins().add(new Pin(new Vector(0, 0), inputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java index dba5d83a2..105ea1458 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java @@ -3,41 +3,44 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.AttributeKey; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.*; -import static de.neemann.digital.core.element.PinInfo.input; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.GenericShape.SIZE; /** * @author hneemann */ public class MuxerShape implements Shape { - private final int inputCount; private final boolean flip; + private final int inputCount; + private final PinDescription[] inputs; + private final PinDescription[] outputs; private Pins pins; - public MuxerShape(ElementAttributes attr) { + public MuxerShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; + this.outputs = outputs; + inputCount = inputs.length - 1; this.flip = attr.get(AttributeKey.FlipSelPositon); - this.inputCount = 1 << attr.get(AttributeKey.SelectorBits); } @Override public Pins getPins() { if (pins == null) { pins = new Pins(); - pins.add(new Pin(new Vector(SIZE, flip ? 0 : inputCount * SIZE), input("sel"))); - if (inputCount == 2) { - pins.add(new Pin(new Vector(0, 0 * SIZE), input("in_0"))); - pins.add(new Pin(new Vector(0, 2 * SIZE), input("in_1"))); + pins.add(new Pin(new Vector(SIZE, flip ? 0 : inputCount * SIZE), inputs[0])); + if (inputs.length == 3) { + pins.add(new Pin(new Vector(0, 0 * SIZE), inputs[1])); + pins.add(new Pin(new Vector(0, 2 * SIZE), inputs[2])); } else for (int i = 0; i < inputCount; i++) { - pins.add(new Pin(new Vector(0, i * SIZE), input("in_" + i))); + pins.add(new Pin(new Vector(0, i * SIZE), inputs[i + 1])); } - pins.add(new Pin(new Vector(SIZE * 2, (inputCount / 2) * SIZE), output("out"))); + pins.add(new Pin(new Vector(SIZE * 2, (inputCount / 2) * SIZE), outputs[0])); } return pins; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java index 9aab879b9..99c987dcd 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java @@ -3,6 +3,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -11,8 +12,6 @@ import de.neemann.digital.draw.graphics.Orientation; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; - /** * @author hneemann */ @@ -21,15 +20,17 @@ public class OutputShape implements Shape { public static final Vector RAD = new Vector(SIZE - 6, SIZE - 6); public static final Vector RADL = new Vector(SIZE, SIZE); private final String label; + private final PinDescription[] inputs; private IOState ioState; - public OutputShape(ElementAttributes attr) { + public OutputShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), input("in"))); + return new Pins().add(new Pin(new Vector(0, 0), inputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java index 91bf49bb3..df750ee5a 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java @@ -2,6 +2,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -10,24 +11,24 @@ import de.neemann.digital.draw.graphics.Orientation; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; - /** * @author hneemann */ public class ProbeShape implements Shape { private final String label; + private final PinDescription[] inputs; private IOState ioState; private int bits; - public ProbeShape(ElementAttributes attr) { + public ProbeShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.inputs = inputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), input("in"))); + return new Pins().add(new Pin(new Vector(0, 0), inputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java index da8fb75d7..b3bf1d367 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java @@ -2,12 +2,12 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.*; -import static de.neemann.digital.core.element.PinInfo.output; import static de.neemann.digital.draw.shapes.OutputShape.SIZE; /** @@ -16,14 +16,16 @@ import static de.neemann.digital.draw.shapes.OutputShape.SIZE; public class ResetShape implements Shape { private final String label; + private final PinDescription[] outputs; - public ResetShape(ElementAttributes attr) { + public ResetShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { + this.outputs = outputs; this.label = attr.getLabel(); } @Override public Pins getPins() { - return new Pins().add(new Pin(new Vector(0, 0), output("Reset"))); + return new Pins().add(new Pin(new Vector(0, 0), outputs[0])); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java index 8c351b548..27e4fc79b 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java @@ -3,7 +3,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; -import de.neemann.digital.core.element.PinInfo; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -17,12 +17,14 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE; */ public class SevenSegHexShape extends SevenShape { private static final int[] TABLE = new int[]{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; + private final PinDescription[] inputs; private Pins pins; private ObservableValue input; private ObservableValue dp; - public SevenSegHexShape(ElementAttributes attr) { + public SevenSegHexShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { super(attr); + this.inputs = inputs; } @Override @@ -49,8 +51,8 @@ public class SevenSegHexShape extends SevenShape { public Pins getPins() { if (pins == null) { pins = new Pins() - .add(new Pin(new Vector(SIZE * 2, SIZE * HEIGHT), PinInfo.input("d"))) - .add(new Pin(new Vector(SIZE * 3, SIZE * HEIGHT), PinInfo.input("dp"))); + .add(new Pin(new Vector(SIZE * 2, SIZE * HEIGHT), inputs[0])) + .add(new Pin(new Vector(SIZE * 3, SIZE * HEIGHT), inputs[1])); } return pins; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java index 0f33d4345..20a87f5b0 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java @@ -3,38 +3,40 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.Style; import de.neemann.digital.draw.graphics.Vector; -import static de.neemann.digital.core.element.PinInfo.input; import static de.neemann.digital.draw.shapes.GenericShape.SIZE; /** * @author hneemann */ public class SevenSegShape extends SevenShape { + private final PinDescription[] inputPins; private ObservableValue[] inputs; private Pins pins; - public SevenSegShape(ElementAttributes attr) { + public SevenSegShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { super(attr); + this.inputPins = inputs; } @Override public Pins getPins() { if (pins == null) { pins = new Pins(); - pins.add(new Pin(new Vector(0, 0), input("a"))); - pins.add(new Pin(new Vector(SIZE, 0), input("b"))); - pins.add(new Pin(new Vector(SIZE * 2, 0), input("c"))); - pins.add(new Pin(new Vector(SIZE * 3, 0), input("d"))); - pins.add(new Pin(new Vector(0, SIZE * HEIGHT), input("e"))); - pins.add(new Pin(new Vector(SIZE, SIZE * HEIGHT), input("f"))); - pins.add(new Pin(new Vector(SIZE * 2, SIZE * HEIGHT), input("g"))); - pins.add(new Pin(new Vector(SIZE * 3, SIZE * HEIGHT), input("dp"))); + pins.add(new Pin(new Vector(0, 0), inputPins[0])); + pins.add(new Pin(new Vector(SIZE, 0), inputPins[1])); + pins.add(new Pin(new Vector(SIZE * 2, 0), inputPins[2])); + pins.add(new Pin(new Vector(SIZE * 3, 0), inputPins[3])); + pins.add(new Pin(new Vector(0, SIZE * HEIGHT), inputPins[4])); + pins.add(new Pin(new Vector(SIZE, SIZE * HEIGHT), inputPins[5])); + pins.add(new Pin(new Vector(SIZE * 2, SIZE * HEIGHT), inputPins[6])); + pins.add(new Pin(new Vector(SIZE * 3, SIZE * HEIGHT), inputPins[7])); } return pins; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/Shape.java b/src/main/java/de/neemann/digital/draw/shapes/Shape.java index ea8f25ce9..d6796f3da 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/Shape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/Shape.java @@ -16,6 +16,9 @@ public interface Shape extends Drawable { * Puts the pins name and the pins x-y-position together! * This information is used to calculate the models connections * from the wiring in the circuit. + * Don't create your own {@link de.neemann.digital.core.element.PinInfo} instance! Try to use + * the instances available from the {@link de.neemann.digital.core.element.ElementTypeDescription}s + * getInputDescription and get * * @return the pins */ diff --git a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java index ea5c1e2e1..48ef374b8 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -32,13 +32,13 @@ public final class ShapeFactory { map.put(NAnd.DESCRIPTION.getName(), new CreatorSimple("&", NAnd.DESCRIPTION, true)); map.put(NOr.DESCRIPTION.getName(), new CreatorSimple("\u22651", NOr.DESCRIPTION, true)); map.put(Not.DESCRIPTION.getName(), new CreatorSimple("", Not.DESCRIPTION, true)); - map.put(Delay.DESCRIPTION.getName(), attr -> new DelayShape()); + map.put(Delay.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new DelayShape()); map.put(XOr.DESCRIPTION.getName(), new CreatorSimple("=1", XOr.DESCRIPTION, false)); map.put(XNOr.DESCRIPTION.getName(), new CreatorSimple("=1", XNOr.DESCRIPTION, true)); - map.put(RAMDualPort.DESCRIPTION.getName(), attr -> new RAMShape("RAM", RAMDualPort.DESCRIPTION.getInputNames(attr), outputInfos(RAMDualPort.DESCRIPTION, attr), attr.get(AttributeKey.Label))); - map.put(RAMSinglePort.DESCRIPTION.getName(), attr -> new RAMShape("RAM", RAMSinglePort.DESCRIPTION.getInputNames(attr), outputInfos(RAMSinglePort.DESCRIPTION, attr), attr.get(AttributeKey.Label))); + map.put(RAMDualPort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape("RAM", RAMDualPort.DESCRIPTION.getInputDescription(attr), RAMDualPort.DESCRIPTION.getOutputDescriptions(attr), attr.get(AttributeKey.Label))); + map.put(RAMSinglePort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape("RAM", RAMSinglePort.DESCRIPTION.getInputDescription(attr), RAMSinglePort.DESCRIPTION.getOutputDescriptions(attr), attr.get(AttributeKey.Label))); map.put(In.DESCRIPTION.getName(), InputShape::new); map.put(Reset.DESCRIPTION.getName(), ResetShape::new); @@ -55,8 +55,8 @@ public final class ShapeFactory { map.put(Break.DESCRIPTION.getName(), BreakShape::new); map.put(Multiplexer.DESCRIPTION.getName(), MuxerShape::new); - map.put(Demultiplexer.DESCRIPTION.getName(), attr -> new DemuxerShape(attr, true)); - map.put(Decoder.DESCRIPTION.getName(), attr -> new DemuxerShape(attr, false)); + map.put(Demultiplexer.DESCRIPTION.getName(), DemuxerShape::new); + map.put(Decoder.DESCRIPTION.getName(), DemuxerShape::new); map.put(Splitter.DESCRIPTION.getName(), SplitterShape::new); map.put(Driver.DESCRIPTION.getName(), DriverShape::new); @@ -64,10 +64,6 @@ public final class ShapeFactory { map.put(DummyElement.TEXTDESCRIPTION.getName(), TextShape::new); } - private PinDescription[] outputInfos(ElementTypeDescription description, ElementAttributes attributes) { - return description.createElement(attributes).getOutputs(); - } - /** * Returns a shape matching the given name. * If no shape is found, a special "missing shape" shape is returned. @@ -88,28 +84,32 @@ public final class ShapeFactory { LibrarySelector.ElementTypeDescriptionCustom customDescr = (LibrarySelector.ElementTypeDescriptionCustom) pt; return new GenericShape( pt.getShortName(), - pt.getInputNames(elementAttributes), - outputInfos(pt, elementAttributes), + pt.getInputDescription(elementAttributes), + pt.getOutputDescriptions(elementAttributes), elementAttributes.get(AttributeKey.Label), true, customDescr.getAttributes().get(AttributeKey.Width)); } else return new GenericShape( pt.getShortName(), - pt.getInputNames(elementAttributes), - outputInfos(pt, elementAttributes), + pt.getInputDescription(elementAttributes), + pt.getOutputDescriptions(elementAttributes), elementAttributes.get(AttributeKey.Label), true); } - } else - return cr.create(elementAttributes); + } else { + ElementTypeDescription pt = library.getElementType(elementName); + return cr.create(elementAttributes, + pt.getInputDescription(elementAttributes), + pt.getOutputDescriptions(elementAttributes)); + } } catch (Exception e) { return new MissingShape(elementName, e); } } private interface Creator { - Shape create(ElementAttributes attributes) throws NodeException; + Shape create(ElementAttributes attributes, PinDescription[] inputs, PinDescription[] outputs) throws NodeException; } @@ -126,8 +126,8 @@ public final class ShapeFactory { } @Override - public Shape create(ElementAttributes attributes) throws NodeException { - return new GenericShape(name, description.getInputNames(attributes), outputInfos(description, attributes)).invert(invers); + public Shape create(ElementAttributes attributes, PinDescription[] inputs, PinDescription[] outputs) throws NodeException { + return new GenericShape(name, inputs, outputs).invert(invers); } } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java index 25fd93a34..cb282b7b2 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java @@ -23,11 +23,11 @@ public class SplitterShape implements Shape { private final int length; private Pins pins; - public SplitterShape(ElementAttributes attr) throws BitsException { + public SplitterShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) throws BitsException { String inputDef = attr.get(AttributeKey.InputSplit); String outputDef = attr.get(AttributeKey.OutputSplit); - inputs = new Splitter.Ports(inputDef).getNames(PinDescription.Direction.input); - outputs = new Splitter.Ports(outputDef).getNames(PinDescription.Direction.output); + this.inputs = new Splitter.Ports(inputDef).getNames(PinDescription.Direction.input); + this.outputs = new Splitter.Ports(outputDef).getNames(PinDescription.Direction.output); length = (Math.max(inputs.length, outputs.length) - 1) * SIZE + 2; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java index 7304bcc5c..1df2a15b4 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java @@ -2,6 +2,7 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.*; @@ -20,7 +21,7 @@ public class TextShape implements Shape { * * @param attr attributes */ - public TextShape(ElementAttributes attr) { + public TextShape(ElementAttributes attr, PinDescription[] inputs, PinDescription[] outputs) { String text = attr.getLabel(); if (text.length() == 0) text = Lang.get("elem_Text"); diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties index 6cfce6d76..8f8052670 100644 --- a/src/main/resources/lang/lang_de.properties +++ b/src/main/resources/lang/lang_de.properties @@ -60,8 +60,14 @@ elem_Seven-Seg-Hex=Siebensegmentanzeige Hex elem_Terminal=Terminal elem_Data=Messwertgraph elem_Multiplexer=Multiplexer +elem_Multiplexer_tt=W\u00E4hlt eine der Eingangsleitungen aus, und gibt dessen Wert am Ausgang aus. +elem_Multiplexer_pin_sel=Mit dieser Leitung wird der Eingang ausgew\u00E4hlt elem_Demultiplexer=Demultiplexer +elem_Demultiplexer_tt=Gibt ein Eingangssignal auf einem w\u00E4hlbaren Ausgang aus, die anderen Ausg\u00E4nge sind Null. +elem_Demultiplexer_pin_sel=Mit dieser Leitung wird der Ausgang ausgew\u00E4hlt elem_Decoder=Decoder +elem_Decoder_tt=Eine w\u00E4hlbare Ausgangsleitung geht auf Eins, alle anderen sind Null. +elem_Decode_pin_sel=Mit dieser Leitung wird der zu aktivierende Ausgang ausgew\u00E4hlt elem_Const=Konstante elem_Splitter=Splitter elem_Clock=Takt