Fixed GUITest: WireEnds used as outputs were created as input.
[Mograsim.git] / era.mi / src / era / mi / logic / tests / GUITest.java
index 4a33344..814a3b7 100644 (file)
@@ -20,9 +20,10 @@ import era.mi.logic.components.ManualSwitch;
 import era.mi.logic.components.gates.NotGate;\r
 import era.mi.logic.components.gates.OrGate;\r
 import era.mi.logic.timeline.Timeline.ExecutionResult;\r
-import era.mi.logic.wires.WireArray;\r
+import era.mi.logic.wires.Wire;\r
 \r
-public class GUITest extends JPanel {\r
+public class GUITest extends JPanel\r
+{\r
 \r
        private static final long serialVersionUID = 1L;\r
 \r
@@ -30,20 +31,20 @@ public class GUITest extends JPanel {
        private static final int OR_DELAY = 100;\r
        private static final int NOT_DELAY = 100;\r
 \r
-       WireArray r = new WireArray(1, WIRE_DELAY);\r
-       WireArray s = new WireArray(1, WIRE_DELAY);\r
-       WireArray t1 = new WireArray(1, WIRE_DELAY);\r
-       WireArray t2 = new WireArray(1, WIRE_DELAY);\r
-       WireArray q = new WireArray(1, WIRE_DELAY);\r
-       WireArray nq = new WireArray(1, WIRE_DELAY);\r
+       Wire r = new Wire(1, WIRE_DELAY);\r
+       Wire s = new Wire(1, WIRE_DELAY);\r
+       Wire t1 = new Wire(1, WIRE_DELAY);\r
+       Wire t2 = new Wire(1, WIRE_DELAY);\r
+       Wire q = new Wire(1, WIRE_DELAY);\r
+       Wire nq = new Wire(1, WIRE_DELAY);\r
 \r
-       ManualSwitch rIn = new ManualSwitch(r);\r
-       ManualSwitch sIn = new ManualSwitch(s);\r
+       ManualSwitch rIn = new ManualSwitch(r.createEnd());\r
+       ManualSwitch sIn = new ManualSwitch(s.createEnd());\r
 \r
-       OrGate or1 = new OrGate(OR_DELAY, t2, r, nq);\r
-       OrGate or2 = new OrGate(OR_DELAY, t1, s, q);\r
-       NotGate not1 = new NotGate(NOT_DELAY, t2, q);\r
-       NotGate not2 = new NotGate(NOT_DELAY, t1, nq);\r
+       OrGate or1 = new OrGate(OR_DELAY, t2.createEnd(), r.createReadOnlyEnd(), nq.createReadOnlyEnd());\r
+       OrGate or2 = new OrGate(OR_DELAY, t1.createEnd(), s.createReadOnlyEnd(), q.createReadOnlyEnd());\r
+       NotGate not1 = new NotGate(NOT_DELAY, t2.createReadOnlyEnd(), q.createEnd());\r
+       NotGate not2 = new NotGate(NOT_DELAY, t1.createReadOnlyEnd(), nq.createEnd());\r
 \r
        Map<ManualSwitch, Rectangle> switchMap = new HashMap<>();\r
 \r
@@ -51,13 +52,18 @@ public class GUITest extends JPanel {
        int width;\r
        boolean sizeChanged;\r
 \r
-       public GUITest() {\r
-               addMouseListener(new MouseListener() {\r
+       public GUITest()\r
+       {\r
+               addMouseListener(new MouseListener()\r
+               {\r
 \r
                        @Override\r
-                       public void mouseReleased(MouseEvent e) {\r
-                               for (Entry<ManualSwitch, Rectangle> dim : switchMap.entrySet()) {\r
-                                       if (dim.getValue().contains(e.getPoint())) {\r
+                       public void mouseReleased(MouseEvent e)\r
+                       {\r
+                               for (Entry<ManualSwitch, Rectangle> dim : switchMap.entrySet())\r
+                               {\r
+                                       if (dim.getValue().contains(e.getPoint()))\r
+                                       {\r
                                                dim.getKey().switchOff();\r
                                                repaint();\r
                                        }\r
@@ -65,9 +71,12 @@ public class GUITest extends JPanel {
                        }\r
 \r
                        @Override\r
-                       public void mousePressed(MouseEvent e) {\r
-                               for (Entry<ManualSwitch, Rectangle> dim : switchMap.entrySet()) {\r
-                                       if (dim.getValue().contains(e.getPoint())) {\r
+                       public void mousePressed(MouseEvent e)\r
+                       {\r
+                               for (Entry<ManualSwitch, Rectangle> dim : switchMap.entrySet())\r
+                               {\r
+                                       if (dim.getValue().contains(e.getPoint()))\r
+                                       {\r
                                                dim.getKey().switchOn();\r
                                                repaint();\r
                                        }\r
@@ -75,17 +84,20 @@ public class GUITest extends JPanel {
                        }\r
 \r
                        @Override\r
-                       public void mouseExited(MouseEvent e) {\r
+                       public void mouseExited(MouseEvent e)\r
+                       {\r
                                // none\r
                        }\r
 \r
                        @Override\r
-                       public void mouseEntered(MouseEvent e) {\r
+                       public void mouseEntered(MouseEvent e)\r
+                       {\r
                                // none\r
                        }\r
 \r
                        @Override\r
-                       public void mouseClicked(MouseEvent e) {\r
+                       public void mouseClicked(MouseEvent e)\r
+                       {\r
                                // If you want toggle buttons, use this code instead\r
 //                             for (Entry<ManualSwitch, Rectangle> dim : switchMap.entrySet()) {\r
 //                                     if (dim.getValue().contains(e.getPoint())) {\r
@@ -98,7 +110,8 @@ public class GUITest extends JPanel {
        }\r
 \r
        @Override\r
-       public void paint(Graphics some_g) {\r
+       public void paint(Graphics some_g)\r
+       {\r
                super.paint(some_g);\r
                Graphics2D g = ((Graphics2D) some_g);\r
                g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);\r
@@ -142,31 +155,37 @@ public class GUITest extends JPanel {
                drawString(g, "Hint: drag the cursor out of the pressed switch to keep it's state", 5, 0, 0.0, 1.0);\r
        }\r
 \r
-       private void checkSizeChange() {\r
+       private void checkSizeChange()\r
+       {\r
                sizeChanged = height != getHeight() || width != getWidth();\r
-               if (sizeChanged) {\r
+               if (sizeChanged)\r
+               {\r
                        height = getHeight();\r
                        width = getWidth();\r
                }\r
        }\r
 \r
-       private void adaptFont(Graphics g) {\r
+       private void adaptFont(Graphics g)\r
+       {\r
                g.setFont(g.getFont().deriveFont(Math.min(height, width) / 40f));\r
        }\r
 \r
-       private void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY) {\r
+       private void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY)\r
+       {\r
                int h = g.getFontMetrics().getAscent();\r
                int w = g.getFontMetrics().stringWidth(s);\r
                g.drawString(s, x - (int) (w * anchorX), y + (int) (h * anchorY));\r
        }\r
 \r
-       private void drawWire(Graphics g, WireArray wa, String name, double x1, double y1, double x2, double y2) {\r
+       private void drawWire(Graphics g, Wire wa, String name, double x1, double y1, double x2, double y2)\r
+       {\r
                setTo(g, wa);\r
                g.drawLine(gX(x1), gY(y1), gX(x2), gY(y2));\r
                drawString(g, name, (gX(x1) + gX(x2)) / 2, (gY(y1) + gY(y2)) / 2 - 5, 0, 0);\r
        }\r
 \r
-       private void drawSquare(Graphics g, int posX, int posY, String text) {\r
+       private void drawSquare(Graphics g, int posX, int posY, String text)\r
+       {\r
                int x1 = gX(posX) - 5;\r
                int x2 = gX(posX + 1) + 5;\r
                int y1 = gY(posY) - 5;\r
@@ -180,14 +199,15 @@ public class GUITest extends JPanel {
 \r
        }\r
 \r
-       private void drawSwitch(Graphics g, ManualSwitch ms, String text, double posX1, double posY1, double posX2,\r
-                       double posY2) {\r
+       private void drawSwitch(Graphics g, ManualSwitch ms, String text, double posX1, double posY1, double posX2, double posY2)\r
+       {\r
                int x1 = gX(posX1) - 5;\r
                int x2 = gX(posX2) + 5;\r
                int y1 = gY(posY1) - 5;\r
                int y2 = gY(posY2) + 5;\r
 \r
-               if (sizeChanged) {\r
+               if (sizeChanged)\r
+               {\r
                        Rectangle r = new Rectangle(x1, y1, x2 - x1, y2 - y1);\r
                        switchMap.put(ms, r);\r
                }\r
@@ -199,12 +219,15 @@ public class GUITest extends JPanel {
                drawString(g, text, (x1 + x2) / 2, (y1 + y2) / 2, 0.5, 0.5);\r
        }\r
 \r
-       private static void setBlack(Graphics g) {\r
+       private static void setBlack(Graphics g)\r
+       {\r
                g.setColor(Color.BLACK);\r
        }\r
 \r
-       private static void setTo(Graphics g, WireArray wa) {\r
-               switch (wa.getValue()) {\r
+       private static void setTo(Graphics g, Wire wa)\r
+       {\r
+               switch (wa.getValue())\r
+               {\r
                case ONE:\r
                        g.setColor(Color.GREEN);\r
                        break;\r
@@ -217,20 +240,26 @@ public class GUITest extends JPanel {
                case ZERO:\r
                        g.setColor(Color.BLACK);\r
                        break;\r
+               case U:\r
+                       g.setColor(Color.MAGENTA);\r
+                       break;\r
                default:\r
                        throw new IllegalArgumentException();\r
                }\r
        }\r
 \r
-       private int gY(double pos) {\r
+       private int gY(double pos)\r
+       {\r
                return (int) (pos * height / 11);\r
        }\r
 \r
-       private int gX(double pos) {\r
+       private int gX(double pos)\r
+       {\r
                return (int) (pos * width / 11) + 50;\r
        }\r
 \r
-       public static void main(String[] args) {\r
+       public static void main(String[] args)\r
+       {\r
                JFrame f = new JFrame("Test circuit 1.0.0");\r
                GUITest gt = new GUITest();\r
                f.add(gt);\r
@@ -244,15 +273,19 @@ public class GUITest extends JPanel {
                long lastFrame = begin;\r
                long updateT = 16;\r
 \r
-               while (f.isVisible()) {\r
+               while (f.isVisible())\r
+               {\r
                        ExecutionResult er = Simulation.TIMELINE.executeUpTo((lastFrame - begin) * 3, lastFrame + 14);\r
 //                             if (Simulation.TIMELINE.hasNext()) \r
 //                             Simulation.TIMELINE.executeNext();\r
                        if (er != ExecutionResult.NOTHING_DONE)\r
                                gt.repaint(12);\r
-                       try {\r
-                               Thread.sleep(Math.max(16 - System.currentTimeMillis() + lastFrame, 0));\r
-                       } catch (Exception e) {\r
+                       try\r
+                       {\r
+                               Thread.sleep(Math.max(updateT - System.currentTimeMillis() + lastFrame, 0));\r
+                       }\r
+                       catch (Exception e)\r
+                       {\r
                                e.printStackTrace();\r
                        }\r
                        lastFrame = System.currentTimeMillis();\r