From cfdd1b3c1e0462726c34cddf9e60ef853171b7fa Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 8 Sep 2017 08:08:17 +0200 Subject: [PATCH] RAM shape also used for EEPROM. Allows opening of data dialog. --- .../digital/core/memory/RAMSinglePortSel.java | 1 - .../neemann/digital/draw/shapes/RAMShape.java | 30 +++++++++++-------- .../digital/draw/shapes/ShapeFactory.java | 8 +++-- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/memory/RAMSinglePortSel.java b/src/main/java/de/neemann/digital/core/memory/RAMSinglePortSel.java index 7380967f8..664eb0fbf 100644 --- a/src/main/java/de/neemann/digital/core/memory/RAMSinglePortSel.java +++ b/src/main/java/de/neemann/digital/core/memory/RAMSinglePortSel.java @@ -23,7 +23,6 @@ public class RAMSinglePortSel extends Node implements Element, RAMInterface { /** * The RAMs {@link ElementTypeDescription} */ - public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(RAMSinglePortSel.class, input("A"), input("CS"), diff --git a/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java b/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java index 3044b3e49..34864b147 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java @@ -1,14 +1,13 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Model; +import de.neemann.digital.core.NodeException; 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.Keys; -import de.neemann.digital.core.element.PinDescriptions; +import de.neemann.digital.core.element.*; import de.neemann.digital.core.memory.DataField; import de.neemann.digital.core.memory.RAMInterface; import de.neemann.digital.draw.elements.IOState; +import de.neemann.digital.draw.elements.PinException; import de.neemann.digital.draw.model.ModelCreator; import de.neemann.digital.draw.model.ModelEntry; import de.neemann.digital.gui.components.CircuitComponent; @@ -26,19 +25,26 @@ public class RAMShape extends GenericShape { private final int dataBits; private final int size; private final int addrBits; - private final String label; + private final String dialogTitle; private Model model; /** * Creates a new instance * - * @param attr the label to use - * @param inputs the inputs - * @param outputs the outputs + * @param attr the attributes of the element + * @param description element type description + * @throws NodeException NodeException + * @throws PinException PinException */ - public RAMShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) { - super("RAM", inputs, outputs, attr.getLabel(), true); - label = attr.getLabel(); + public RAMShape(ElementAttributes attr, ElementTypeDescription description) throws NodeException, PinException { + super(description.getShortName(), + description.getInputDescription(attr), + description.getOutputDescriptions(attr), + attr.getLabel(), true); + if (attr.getLabel().length() > 0) + dialogTitle = attr.getLabel(); + else + dialogTitle = description.getShortName(); dataBits = attr.get(Keys.BITS); addrBits = attr.get(Keys.ADDR_BITS); size = 1 << addrBits; @@ -52,7 +58,7 @@ public class RAMShape extends GenericShape { if (element instanceof RAMInterface) { DataField dataField = ((RAMInterface) element).getMemory(); DataEditor dataEditor = new DataEditor(cc, dataField, size, dataBits, addrBits, true, modelSync); - dataEditor.showDialog(label, model); + dataEditor.showDialog(dialogTitle, model); } return false; } 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 aac5acd2d..af951e7df 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -7,6 +7,7 @@ import de.neemann.digital.core.element.ElementTypeDescription; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.core.io.*; +import de.neemann.digital.core.memory.EEPROM; import de.neemann.digital.core.memory.RAMDualPort; import de.neemann.digital.core.memory.RAMSinglePort; import de.neemann.digital.core.memory.RAMSinglePortSel; @@ -73,9 +74,10 @@ public final class ShapeFactory { } - map.put(RAMDualPort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMDualPort.DESCRIPTION.getInputDescription(attr), RAMDualPort.DESCRIPTION.getOutputDescriptions(attr))); - map.put(RAMSinglePort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMSinglePort.DESCRIPTION.getInputDescription(attr), RAMSinglePort.DESCRIPTION.getOutputDescriptions(attr))); - map.put(RAMSinglePortSel.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMSinglePortSel.DESCRIPTION.getInputDescription(attr), RAMSinglePortSel.DESCRIPTION.getOutputDescriptions(attr))); + map.put(RAMDualPort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMDualPort.DESCRIPTION)); + map.put(RAMSinglePort.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMSinglePort.DESCRIPTION)); + map.put(RAMSinglePortSel.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, RAMSinglePortSel.DESCRIPTION)); + map.put(EEPROM.DESCRIPTION.getName(), (attr, inputs, outputs) -> new RAMShape(attr, EEPROM.DESCRIPTION)); map.put(In.DESCRIPTION.getName(), InputShape::new); map.put(Reset.DESCRIPTION.getName(), ResetShape::new);