Implemented GUInand3
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / components / mi / nandbased / GUInand3.java
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java
new file mode 100644 (file)
index 0000000..8caf990
--- /dev/null
@@ -0,0 +1,80 @@
+package net.mograsim.logic.ui.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.ui.model.ViewModelModifiable;
+import net.mograsim.logic.ui.model.components.GUINandGate;
+import net.mograsim.logic.ui.model.components.SubmodelComponent;
+import net.mograsim.logic.ui.model.wires.GUIWire;
+import net.mograsim.logic.ui.model.wires.Pin;
+import net.mograsim.logic.ui.model.wires.WireCrossPoint;
+
+public class GUInand3 extends SubmodelComponent
+{
+       private final Pin pinA;
+       private final Pin pinB;
+       private final Pin pinC;
+       private final Pin pinY;
+
+       public GUInand3(ViewModelModifiable model)
+       {
+               super(model, "GUInand3");
+               setSize(40, 30);
+               setSubmodelScale(.4);
+
+               Pin A = addSubmodelInterface(1, 0, 5);
+               Pin B = addSubmodelInterface(1, 0, 15);
+               Pin C = addSubmodelInterface(1, 0, 25);
+               Pin Y = addSubmodelInterface(1, 40, 15);
+
+               this.pinA = getSupermodelPin(A);
+               this.pinB = getSupermodelPin(B);
+               this.pinC = getSupermodelPin(C);
+               this.pinY = getSupermodelPin(Y);
+
+               initSubmodelComponents(A, B, C, Y);
+       }
+
+       @SuppressWarnings("unused") // for GUIWires being created
+       private void initSubmodelComponents(Pin A, Pin B, Pin C, Pin Y)
+       {
+               GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate andAB = new GUINandGate(submodelModifiable, 1);
+               GUINandGate nandABC = new GUINandGate(submodelModifiable, 1);
+
+               WireCrossPoint cpNandAB = new WireCrossPoint(submodelModifiable, 1);
+
+               nandAB.moveTo(10, 15);
+               andAB.moveTo(40, 15);
+               nandABC.moveTo(70, 27.5);
+               cpNandAB.moveTo(35, 25);
+
+               new GUIWire(submodelModifiable, A, nandAB.getInputPins().get(0), new Point(5, 12.5), new Point(5, 20));
+               new GUIWire(submodelModifiable, B, nandAB.getInputPins().get(1), new Point(5, 37.5), new Point(5, 30));
+               new GUIWire(submodelModifiable, nandAB.getOutputPin(), cpNandAB.getPin());
+               new GUIWire(submodelModifiable, cpNandAB.getPin(), andAB.getInputPins().get(0), new Point(35, 20));
+               new GUIWire(submodelModifiable, cpNandAB.getPin(), andAB.getInputPins().get(1), new Point(35, 30));
+               new GUIWire(submodelModifiable, andAB.getOutputPin(), nandABC.getInputPins().get(0), new Point(65, 25), new Point(65, 32.5));
+               new GUIWire(submodelModifiable, C, nandABC.getInputPins().get(1), new Point(65, 62.5), new Point(65, 42.5));
+               new GUIWire(submodelModifiable, nandABC.getOutputPin(), Y);
+       }
+
+       public Pin getPinA()
+       {
+               return pinA;
+       }
+
+       public Pin getPinB()
+       {
+               return pinB;
+       }
+
+       public Pin getPinC()
+       {
+               return pinC;
+       }
+
+       public Pin getPinY()
+       {
+               return pinY;
+       }
+}
\ No newline at end of file