From 6e4cba5f4efabd7c069f53fbf41336ee1c7db402 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Thu, 5 Sep 2019 00:00:13 +0200 Subject: [PATCH] Added FixedOutputAdapter and cleaned some things up --- .../components/atomic/GUIFixedOutput.java | 77 +++++++++++++++++++ .../componentadapters/FixedOutputAdapter.java | 25 ++++++ .../IndirectGUIComponentCreator.java | 4 +- .../standardComponentIDMapping.json | 7 +- 4 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIFixedOutput.java create mode 100644 net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/FixedOutputAdapter.java diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIFixedOutput.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIFixedOutput.java new file mode 100644 index 00000000..651daba9 --- /dev/null +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIFixedOutput.java @@ -0,0 +1,77 @@ +package net.mograsim.logic.model.model.components.atomic; + +import java.util.Objects; + +import org.eclipse.swt.graphics.Color; + +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.core.types.BitVector; +import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.model.model.ViewModelModifiable; +import net.mograsim.logic.model.model.components.GUIComponent; +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.modeladapter.componentadapters.FixedOutputAdapter; +import net.mograsim.logic.model.serializing.IdentifyParams; +import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; +import net.mograsim.logic.model.util.JsonHandler; +import net.mograsim.preferences.Preferences; + +public class GUIFixedOutput extends GUIComponent +{ + private static final double width = 20; + private static final double height = 20; + private static final double fontHeight = 5; + + public final BitVector bits; + + public GUIFixedOutput(ViewModelModifiable model, BitVector bits, String name) + { + super(model, name); + this.bits = bits; + setSize(width, height); + addPin(new Pin(this, "out", bits.length(), PinUsage.OUTPUT, width, height / 2)); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "GUIFixedOutput"; + } + + @Override + public Object getParamsForSerializing(IdentifyParams idParams) + { + return bits; + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + if (foreground != null) + gc.setForeground(foreground); + gc.drawRectangle(getBounds()); + String label = BitVectorFormatter.formatAsString(bits); + Font oldFont = gc.getFont(); + Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); + gc.setFont(labelFont); + 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); + } + + static + { + ViewLogicModelAdapter.addComponentAdapter(new FixedOutputAdapter()); + IndirectGUIComponentCreator.setComponentSupplier(GUIFixedOutput.class.getCanonicalName(), + (m, p, n) -> new GUIFixedOutput(m, Objects.requireNonNull(JsonHandler.fromJsonTree(p, BitVector.class)), n)); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/FixedOutputAdapter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/FixedOutputAdapter.java new file mode 100644 index 00000000..03fa400b --- /dev/null +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/FixedOutputAdapter.java @@ -0,0 +1,25 @@ +package net.mograsim.logic.model.modeladapter.componentadapters; + +import java.util.Map; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.model.model.components.atomic.GUIFixedOutput; +import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.modeladapter.LogicModelParameters; + +public class FixedOutputAdapter implements ComponentAdapter +{ + @Override + public Class getSupportedClass() + { + return GUIFixedOutput.class; + } + + @Override + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIFixedOutput guiComponent, + Map logicWiresPerPin) + { + logicWiresPerPin.get(guiComponent.getPin("out")).createReadWriteEnd().feedSignals(guiComponent.bits); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java index 681580ec..c6d1529f 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/IndirectGUIComponentCreator.java @@ -71,9 +71,9 @@ public class IndirectGUIComponentCreator return standardComponentIDsUnmodifiable; } - public static void setComponentSupplier(String className, ComponentSupplier componentSupplier) + public static void setComponentSupplier(String id, ComponentSupplier componentSupplier) { - componentSuppliers.put(className, componentSupplier); + componentSuppliers.put(id, componentSupplier); } public static GUIComponent createComponent(ViewModelModifiable model, String id) diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json index ded55bac..8fa63b0f 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/serializing/standardComponentIDMapping.json @@ -1,14 +1,15 @@ mograsim version: 0.1.3 { - "GUIManualSwitch": "class:net.mograsim.logic.model.model.components.atomic.GUIManualSwitch", - "GUIBitDisplay": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay", "GUIAndGate": "class:net.mograsim.logic.model.model.components.atomic.GUIAndGate", + "GUIBitDisplay": "class:net.mograsim.logic.model.model.components.atomic.GUIBitDisplay", + "GUIClock": "class:net.mograsim.logic.model.model.components.atomic.GUIClock", + "GUIFixedOutput": "class:net.mograsim.logic.model.model.components.atomic.GUIFixedOutput", + "GUIManualSwitch": "class:net.mograsim.logic.model.model.components.atomic.GUIManualSwitch", "GUIMerger": "class:net.mograsim.logic.model.model.components.atomic.GUIMerger", "GUINandGate": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate", "GUIOrGate": "class:net.mograsim.logic.model.model.components.atomic.GUIOrGate", "GUISplitter": "class:net.mograsim.logic.model.model.components.atomic.GUISplitter", "GUITriStateBuffer": "class:net.mograsim.logic.model.model.components.atomic.GUITriStateBuffer", - "GUIClock": "class:net.mograsim.logic.model.model.components.atomic.GUIClock", "TextComponent": "class:net.mograsim.logic.model.model.components.atomic.TextComponent", "WireCrossPoint": "class:net.mograsim.logic.model.model.wires.WireCrossPoint" } \ No newline at end of file -- 2.17.1