X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fstandard%2Fmemory%2FGUIMemoryWA.java;h=bd5eba8937977ead556426cb19a936ef3fa193cd;hb=0a04a4ed66ecebd4254541c4977599f6052c115a;hp=3d63b4704eac9ecfb8ab4383a5ae89c3c036c848;hpb=de4ce44622b2a40c2ff4030467de8f56db917329;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java index 3d63b470..bd5eba89 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java @@ -1,42 +1,47 @@ package net.mograsim.machine.standard.memory; -import org.eclipse.swt.graphics.Color; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - 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.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.components.GUIComponent; import net.mograsim.logic.model.model.components.atomic.GUIAndGate; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; -import net.mograsim.logic.model.serializing.IdentifierGetter; +import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; -import net.mograsim.preferences.Preferences; +import net.mograsim.logic.model.snippets.Renderer; +import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; +import net.mograsim.logic.model.snippets.symbolrenderers.CenteredTextSymbolRenderer; +import net.mograsim.logic.model.snippets.symbolrenderers.CenteredTextSymbolRenderer.CenteredTextParams; +import net.mograsim.logic.model.util.JsonHandler; +import net.mograsim.machine.MainMemoryDefinition; public class GUIMemoryWA extends GUIComponent { - private final static String paramAddr = "addrBits", paramWordWidth = "wordWidth", paramMaxAddr = "maxAddr", paramMinAddr = "minAddr"; - private final int addressBits, wordWidth; - public final long maximalAddress, minimalAddress; - private final Pin addrPin, dataPin, rWPin; - private final static int width = 100, height = 300; + private final MainMemoryDefinition definition; + private final Pin addrPin, dataPin, rWPin; + private WordAddressableMemoryComponent memory; + private final static int width = 100, height = 300; + private Renderer symbolRenderer; + private Renderer outlineRenderer; - public GUIMemoryWA(ViewModelModifiable model, int addressBits, int wordWidth, long maximalAddress, long minimalAddress, String name) + public GUIMemoryWA(ViewModelModifiable model, MainMemoryDefinition definition, String name) { super(model, name); - this.addressBits = addressBits; - this.wordWidth = wordWidth; - this.maximalAddress = maximalAddress; - this.minimalAddress = minimalAddress; + this.definition = definition; + + CenteredTextParams renderer1Params = new CenteredTextParams(); + renderer1Params.text = "RAM"; + renderer1Params.fontHeight = 24; + this.symbolRenderer = new CenteredTextSymbolRenderer(this, renderer1Params); + this.outlineRenderer = new DefaultOutlineRenderer(this); + setSize(width, height); - addPin(addrPin = new Pin(this, "A", addressBits, 0, 10)); - addPin(dataPin = new Pin(this, "D", wordWidth, 0, 30)); - addPin(rWPin = new Pin(this, "RW", 1, 0, 50)); + //TODO check the usages + addPin(addrPin = new Pin(this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, 0, 10)); + addPin(dataPin = new Pin(this, "D", definition.getCellWidth(), PinUsage.TRISTATE, 0, 30)); + addPin(rWPin = new Pin(this, "RW", 1, PinUsage.INPUT, 0, 50)); } public Pin getAddressPin() @@ -54,35 +59,43 @@ public class GUIMemoryWA extends GUIComponent return rWPin; } + public void setLogicModelBinding(WordAddressableMemoryComponent memory) + { + this.memory = memory; + } + + public MainMemoryDefinition getDefinition() + { + return definition; + } + + public WordAddressableMemoryComponent getMemory() + { + return memory; + } + @Override public void render(GeneralGC gc, Rectangle visibleRegion) { - // TODO This is copied from SimpleRectangularGUIGate; do this via delegation instead - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); - if (foreground != null) - gc.setForeground(foreground); - gc.drawRectangle(getPosX(), getPosY(), width, height); - Font oldFont = gc.getFont(); - Font labelFont = new Font(oldFont.getName(), 24, oldFont.getStyle()); - gc.setFont(labelFont); - String label = "RAM"; - Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); - if (textColor != null) - gc.setForeground(textColor); - gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true); - gc.setFont(oldFont); + symbolRenderer.render(gc, visibleRegion); + outlineRenderer.render(gc, visibleRegion); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "GUIMemoryWA";//TODO } @Override - public JsonElement getParamsForSerializing(IdentifierGetter idGetter) + public GUIMemoryWAParams getParamsForSerializing(IdentifyParams idParams) { - JsonObject obj = new JsonObject(); - obj.addProperty(paramAddr, addressBits); - obj.addProperty(paramWordWidth, wordWidth); - obj.addProperty(paramMaxAddr, maximalAddress); - obj.addProperty(paramMinAddr, minimalAddress); - return obj; + GUIMemoryWAParams params = new GUIMemoryWAParams(); + params.addrBits = definition.getMemoryAddressBits(); + params.cellWidth = definition.getCellWidth(); + params.minAddr = definition.getMinimalAddress(); + params.maxAddr = definition.getMaximalAddress(); + return params; } static @@ -90,9 +103,16 @@ public class GUIMemoryWA extends GUIComponent ViewLogicModelAdapter.addComponentAdapter(new WordAddressableMemoryAdapter()); IndirectGUIComponentCreator.setComponentSupplier(GUIAndGate.class.getCanonicalName(), (m, p, n) -> { - JsonObject obj = p.getAsJsonObject(); - return new GUIMemoryWA(m, obj.get(paramAddr).getAsInt(), obj.get(paramWordWidth).getAsInt(), obj.get(paramMaxAddr).getAsLong(), - obj.get(paramMinAddr).getAsLong(), n); + GUIMemoryWAParams params = JsonHandler.fromJsonTree(p, GUIMemoryWAParams.class); + return new GUIMemoryWA(m, MainMemoryDefinition.create(params.addrBits, params.cellWidth, params.minAddr, params.maxAddr), n); }); } + + public static class GUIMemoryWAParams + { + public int addrBits; + public int cellWidth; + public long minAddr; + public long maxAddr; + } }