Added GUITest, ManualSwitch and one method to Timeline
[Mograsim.git] / era.mi / src / era / mi / logic / components / ManualSwitch.java
1 package era.mi.logic.components;\r
2 \r
3 import java.util.List;\r
4 \r
5 import era.mi.logic.Bit;\r
6 import era.mi.logic.wires.WireArray;\r
7 import era.mi.logic.wires.WireArray.WireArrayInput;\r
8 \r
9 /**\r
10  * This class models a simple on/off (ONE/ZERO) switch for user interaction.\r
11  *\r
12  * @author Christian Femers\r
13  *\r
14  */\r
15 public final class ManualSwitch implements Component \r
16 {\r
17         private WireArray output;\r
18         private WireArrayInput outputI;\r
19         private boolean isOn;\r
20         \r
21         public ManualSwitch(WireArray output) \r
22         {\r
23                 if(output.length != 1)\r
24                         throw new IllegalArgumentException("Switch output can be only a single wire");\r
25                 this.output = output;\r
26                 this.outputI = output.createInput();\r
27         }\r
28         \r
29         public void switchOn()\r
30         {\r
31                 setState(true);\r
32         }\r
33         \r
34         public void switchOff()\r
35         {\r
36                 setState(false);\r
37         }\r
38         \r
39         public void toggle()\r
40         {\r
41                 setState(!isOn);\r
42         }\r
43         \r
44         public void setState(boolean isOn)\r
45         {\r
46                 if(this.isOn == isOn)\r
47                         return;\r
48                 this.isOn = isOn;\r
49                 outputI.feedSignals(getValue());\r
50         }\r
51         \r
52         public boolean isOn()\r
53         {\r
54                 return isOn;\r
55         }\r
56         \r
57         public Bit getValue()\r
58         {\r
59                 return isOn ? Bit.ONE : Bit.ZERO;\r
60         }\r
61 \r
62         @Override\r
63         public List<WireArray> getAllInputs() {\r
64                 return List.of();\r
65         }\r
66 \r
67         @Override\r
68         public List<WireArray> getAllOutputs() {\r
69                 return List.of(output);\r
70         }\r
71 \r
72 }\r