+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Merger;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMerger extends Merger implements GUIComponent
-{
- private final int inputCount;
- private final double height;
- private final List<ReadEnd> connectedWireEnds;
- private final List<Point> WireEndConnectionPoints;
-
- public GUIMerger(ReadWriteEnd union, ReadEnd... inputs)
- {
- super(union, inputs);
-
- List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
- List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
- this.inputCount = inputs.length;
- this.height = (inputCount - 1) * 10;
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
- double inputHeight = 0;
- for (int i = 0; i < inputCount; i++, inputHeight += 10)
- WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
- }
-
- connectedWireEndsModifiable.add(union);
- WireEndConnectionPointsModifiable.add(new Point(20, height / 2));
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- double inputHeight = 0;
- for (int i = 0; i < inputCount; i++, inputHeight += 10)
- gc.drawLine(0, inputHeight, 10, inputHeight);
- gc.drawLine(10, 0, 10, height);
- gc.drawLine(10, height / 2, 20, height / 2);
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Mux;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMux extends Mux implements GUIComponent
-{
- private final double height;
- private final List<ReadEnd> connectedWireEnds;
- private final List<Point> WireEndConnectionPoints;
-
- public GUIMux(int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
- {
- super(processTime, out, select, inputs);
-
- double height = inputs.length * 5;
- if (height < 10)
- height = 10;
- this.height = height;
-
- List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
- List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
- connectedWireEndsModifiable.add(out);
- WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));
-
- connectedWireEndsModifiable.add(select);
- WireEndConnectionPointsModifiable.add(new Point(10, 5));
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
- double inputHeightIncrement = (height + 20) / inputs.length;
- double inputHeight = inputHeightIncrement / 2;
- for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)
- WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
- }
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height + 20);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.gui.ViewModel;
-import era.mi.logic.components.Splitter;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUISplitter extends GUIComponent
-{
- public GUISplitter(ViewModel model)
- {
- super(model);
-
- this.outputCount = outputs.length;
- this.height = (outputCount - 1) * 10;
-
- connectedWireEndsModifiable.add(input);
- WireEndConnectionPointsModifiable.add(new Point(0, height / 2));
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(outputs));
- double outputHeight = 0;
- for (int i = 0; i < outputCount; i++, outputHeight += 10)
- WireEndConnectionPointsModifiable.add(new Point(20, outputHeight));
- }
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- gc.drawLine(0, height / 2, 10, height / 2);
- gc.drawLine(10, 0, 10, height);
- double outputHeight = 0;
- for (int i = 0; i < outputCount; i++, outputHeight += 10)
- gc.drawLine(10, outputHeight, 20, outputHeight);
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;\r
+\r
+import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
+import net.mograsim.logic.core.types.BitVectorFormatter;\r
+import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.model.model.ViewModelModifiable;\r
+import net.mograsim.logic.model.model.components.GUIComponent;\r
+import net.mograsim.logic.model.model.wires.Pin;\r
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;\r
+import net.mograsim.logic.model.modeladapter.componentadapters.MergerAdapter;\r
+import net.mograsim.preferences.ColorDefinition;\r
+import net.mograsim.preferences.ColorManager;\r
+import net.mograsim.preferences.Preferences;\r
+\r
+public class GUIMerger extends GUIComponent\r
+{\r
+ private static final double width = 20;\r
+ private static final double heightPerPin = 10;\r
+\r
+ public final int logicWidth;\r
+\r
+ private ReadEnd[] inputEnds;\r
+ private ReadEnd outputEnd;\r
+\r
+ public GUIMerger(ViewModelModifiable model, int logicWidth, String name)\r
+ {\r
+ super(model, name);\r
+ this.logicWidth = logicWidth;\r
+ setSize(width, logicWidth * heightPerPin);\r
+ double inputHeight = 0;\r
+ for (int i = 0; i < logicWidth; i++, inputHeight += 10)\r
+ addPin(new Pin(this, "I" + i, 1, 0, inputHeight));\r
+ addPin(new Pin(this, "O", logicWidth, width, logicWidth * heightPerPin / 2));\r
+ }\r
+\r
+ @Override\r
+ public void render(GeneralGC gc, Rectangle visibleRegion)\r
+ {\r
+ double posX = getPosX();\r
+ double posY = getPosY();\r
+\r
+ double inputHeight = posY;\r
+ for (int i = 0; i < logicWidth; i++, inputHeight += 10)\r
+ {\r
+ ColorDefinition c = BitVectorFormatter.formatAsColor(inputEnds[i]);\r
+ if (c != null)\r
+ gc.setForeground(ColorManager.current().toColor(c));\r
+ gc.drawLine(posX, inputHeight, posX + width / 2, inputHeight);\r
+ }\r
+ gc.setForeground(Preferences.current().getColor("net.mograsim.logic.model.color.foreground"));\r
+ gc.drawLine(posX + width / 2, posY, posX + width / 2, posY + heightPerPin * (logicWidth - 1));\r
+ ColorDefinition c = BitVectorFormatter.formatAsColor(outputEnd);\r
+ if (c != null)\r
+ gc.setForeground(ColorManager.current().toColor(c));\r
+ gc.drawLine(posX + width / 2, posY + heightPerPin * logicWidth / 2, posX + width, posY + heightPerPin * logicWidth / 2);\r
+ }\r
+\r
+ public void setLogicModelBinding(ReadEnd[] inputEnds, ReadEnd outputEnd)\r
+ {\r
+ this.inputEnds = inputEnds;\r
+ this.outputEnd = outputEnd;\r
+ }\r
+\r
+ static\r
+ {\r
+ ViewLogicModelAdapter.addComponentAdapter(new MergerAdapter());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;\r
+\r
+import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
+import net.mograsim.logic.core.types.BitVectorFormatter;\r
+import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.model.model.ViewModelModifiable;\r
+import net.mograsim.logic.model.model.components.GUIComponent;\r
+import net.mograsim.logic.model.model.wires.Pin;\r
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;\r
+import net.mograsim.logic.model.modeladapter.componentadapters.SplitterAdapter;\r
+import net.mograsim.preferences.ColorDefinition;\r
+import net.mograsim.preferences.ColorManager;\r
+import net.mograsim.preferences.Preferences;\r
+\r
+public class GUISplitter extends GUIComponent\r
+{\r
+ private static final double width = 20;\r
+ private static final double heightPerPin = 10;\r
+\r
+ public final int logicWidth;\r
+\r
+ private ReadEnd inputEnd;\r
+ private ReadEnd[] outputEnds;\r
+\r
+ public GUISplitter(ViewModelModifiable model, int logicWidth, String name)\r
+ {\r
+ super(model, name);\r
+ this.logicWidth = logicWidth;\r
+ setSize(width, logicWidth * heightPerPin);\r
+ addPin(new Pin(this, "I", logicWidth, 0, logicWidth * heightPerPin / 2));\r
+ double outputHeight = 0;\r
+ for (int i = 0; i < logicWidth; i++, outputHeight += 10)\r
+ addPin(new Pin(this, "O" + i, 1, width, outputHeight));\r
+ }\r
+\r
+ @Override\r
+ public void render(GeneralGC gc, Rectangle visibleRegion)\r
+ {\r
+ double posX = getPosX();\r
+ double posY = getPosY();\r
+\r
+ ColorDefinition c = BitVectorFormatter.formatAsColor(inputEnd);\r
+ if (c != null)\r
+ gc.setForeground(ColorManager.current().toColor(c));\r
+ gc.drawLine(posX, posY + heightPerPin * logicWidth / 2, posX + width / 2, posY + heightPerPin * logicWidth / 2);\r
+ gc.setForeground(Preferences.current().getColor("net.mograsim.logic.model.color.foreground"));\r
+ gc.drawLine(posX + width / 2, posY, posX + width / 2, posY + heightPerPin * (logicWidth - 1));\r
+ double outputHeight = posY;\r
+ for (int i = 0; i < logicWidth; i++, outputHeight += 10)\r
+ {\r
+ c = BitVectorFormatter.formatAsColor(outputEnds[i]);\r
+ if (c != null)\r
+ gc.setForeground(ColorManager.current().toColor(c));\r
+ gc.drawLine(posX + width / 2, outputHeight, posX + width, outputHeight);\r
+ }\r
+ }\r
+\r
+ public void setLogicModelBinding(ReadEnd inputEnd, ReadEnd[] outputEnds)\r
+ {\r
+ this.inputEnd = inputEnd;\r
+ this.outputEnds = outputEnds;\r
+ }\r
+\r
+ static\r
+ {\r
+ ViewLogicModelAdapter.addComponentAdapter(new SplitterAdapter());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;\r
+\r
+import java.util.Map;\r
+\r
+import net.mograsim.logic.core.timeline.Timeline;\r
+import net.mograsim.logic.core.wires.Wire;\r
+import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.model.model.components.atomic.GUIMerger;\r
+import net.mograsim.logic.model.model.wires.Pin;\r
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;\r
+\r
+public class MergerAdapter implements ComponentAdapter<GUIMerger>\r
+{\r
+ @Override\r
+ public Class<GUIMerger> getSupportedClass()\r
+ {\r
+ return GUIMerger.class;\r
+ }\r
+\r
+ @Override\r
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIMerger guiComponent,\r
+ Map<Pin, Wire> logicWiresPerPin)\r
+ {\r
+ Wire output = logicWiresPerPin.get(guiComponent.getPin("O"));\r
+ ReadEnd[] inputEnds = new ReadEnd[guiComponent.logicWidth];\r
+ for (int i = 0; i < guiComponent.logicWidth; i++)\r
+ {\r
+ Wire input = logicWiresPerPin.get(guiComponent.getPin("I" + i));\r
+ Wire.fuse(input, output, 0, i, 1);\r
+ inputEnds[i] = input.createReadOnlyEnd();\r
+ }\r
+ guiComponent.setLogicModelBinding(inputEnds, output.createReadOnlyEnd());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;\r
+\r
+import java.util.Map;\r
+\r
+import net.mograsim.logic.core.timeline.Timeline;\r
+import net.mograsim.logic.core.wires.Wire;\r
+import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.model.model.components.atomic.GUISplitter;\r
+import net.mograsim.logic.model.model.wires.Pin;\r
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;\r
+\r
+public class SplitterAdapter implements ComponentAdapter<GUISplitter>\r
+{\r
+ @Override\r
+ public Class<GUISplitter> getSupportedClass()\r
+ {\r
+ return GUISplitter.class;\r
+ }\r
+\r
+ @Override\r
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUISplitter guiComponent,\r
+ Map<Pin, Wire> logicWiresPerPin)\r
+ {\r
+ Wire input = logicWiresPerPin.get(guiComponent.getPin("I"));\r
+ ReadEnd[] outputEnds = new ReadEnd[guiComponent.logicWidth];\r
+ for (int i = 0; i < guiComponent.logicWidth; i++)\r
+ {\r
+ Wire output = logicWiresPerPin.get(guiComponent.getPin("O" + i));\r
+ Wire.fuse(input, output, i, 0, 1);\r
+ outputEnds[i] = output.createReadOnlyEnd();\r
+ }\r
+ guiComponent.setLogicModelBinding(input.createReadOnlyEnd(), outputEnds);\r
+ }\r
+}
\ No newline at end of file