10
10
11
11
import javax .swing .JOptionPane ;
12
12
13
+ import com .modsim .modules .parts .VisiblePart ;
13
14
import com .modsim .modules .ports .BidirPort ;
14
15
import com .modsim .Main ;
15
16
import com .modsim .modules .parts .Port ;
@@ -26,6 +27,9 @@ public class SplitMerge extends BaseModule {
26
27
private final BidirPort portA0 , portA1 ;
27
28
private final BidirPort portB0 , portB1 , portB2 , portB3 ;
28
29
30
+ private final SSText portA0Text , portA1Text ;
31
+ private final SSText portB0Text , portB1Text , portB2Text , portB3Text ;
32
+
29
33
private final List <BezierCurve > curves ;
30
34
31
35
public SplitMerge () {
@@ -79,14 +83,22 @@ public SplitMerge() {
79
83
cs [8 ] = new BezierCurve (new Vec2 (B + b1 , 23 ), new Vec2 (d - b0 , -23 ), // B1-d0
80
84
new Vec2 (B + b1 , -15 ), new Vec2 (d - b0 , 15 ));
81
85
curves = Collections .unmodifiableList (Arrays .asList (cs ));
82
-
83
- parts .add (new SSText (A -8 , 24 , "DCBA" , 7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
84
- parts .add (new SSText (B -8 , 24 , "XXDC" , 7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
85
- parts .add (new SSText (a +8 , -24 , "XXBA" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
86
- parts .add (new SSText (b +8 , -24 , "XXXB" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
87
- parts .add (new SSText (c +8 , -24 , "XXDC" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
88
- parts .add (new SSText (d +8 , -24 , "XXXD" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily ()));
89
86
87
+ portA0Text = new SSText (A -8 , 24 , "DCBA" , 7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
88
+ portA1Text = new SSText (B -8 , 24 , "XXDC" , 7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
89
+
90
+ portB0Text = new SSText (a +8 , -24 , "XXBA" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
91
+ portB1Text = new SSText (b +8 , -24 , "XXXB" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
92
+ portB2Text = new SSText (c +8 , -24 , "XXDC" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
93
+ portB3Text = new SSText (d +8 , -24 , "XXXD" , -7 , Colors .splitMergeLabel , Fonts .splitMergeLabel .getFamily (), VisiblePart .RefreshMode .Dynamic );
94
+
95
+ parts .add (portA0Text );
96
+ parts .add (portA1Text );
97
+
98
+ parts .add (portB0Text );
99
+ parts .add (portB1Text );
100
+ parts .add (portB2Text );
101
+ parts .add (portB3Text );
90
102
}
91
103
92
104
@ Override
@@ -95,42 +107,89 @@ public void paintStatic(Graphics2D g) {
95
107
g .setColor (Colors .moduleFill );
96
108
drawBox (g , 10 );
97
109
110
+ drawStaticParts (g );
111
+ }
112
+
113
+ @ Override
114
+ public void paintDynamic (Graphics2D g ) {
98
115
// Show drawing
99
116
g .setStroke (new BasicStroke (2 ));
100
117
for (int i = 0 ; i < curves .size (); i ++) {
101
118
int grad = 0 ;
102
119
switch (i ) {
103
- case 0 :
104
- grad = 120 ;
105
- break ;
106
- case 1 :
107
- case 2 :
108
- grad = 140 ;
109
- break ;
110
- case 3 :
111
- grad = 160 ;
112
- break ;
113
- case 4 :
114
- case 5 :
115
- grad = 180 ;
116
- break ;
117
- case 6 :
118
- grad = 200 ;
119
- break ;
120
- case 7 :
121
- case 8 :
122
- grad = 220 ;
123
- break ;
120
+ case 0 :
121
+ grad = 120 ;
122
+ break ;
123
+ case 1 :
124
+ case 2 :
125
+ grad = 140 ;
126
+ break ;
127
+ case 3 :
128
+ grad = 160 ;
129
+ break ;
130
+ case 4 :
131
+ case 5 :
132
+ grad = 180 ;
133
+ break ;
134
+ case 6 :
135
+ grad = 200 ;
136
+ break ;
137
+ case 7 :
138
+ case 8 :
139
+ grad = 220 ;
140
+ break ;
124
141
}
125
142
g .setColor (new Color (grad , grad , grad ));
126
143
curves .get (i ).draw (g );
127
144
}
128
145
146
+ if (portA0 .isConnected ()) {
147
+ portA0Text .setText (portA0 .getVal ().toString ());
148
+ }
149
+ else {
150
+ portA0Text .setText ("DCBA" );
151
+ }
152
+
153
+ if (portA1 .isConnected ()) {
154
+ portA1Text .setText (portA1 .getVal ().toString ());
155
+ }
156
+ else {
157
+ portA1Text .setText ("XXDC" );
158
+ }
159
+
160
+ if (portB0 .isConnected ()) {
161
+ portB0Text .setText (portB0 .getVal ().toString ());
162
+ }
163
+ else {
164
+ portB0Text .setText ("XXBA" );
165
+ }
166
+
167
+ if (portB1 .isConnected ()) {
168
+ portB1Text .setText (portB1 .getVal ().toString ());
169
+ }
170
+ else {
171
+ portB1Text .setText ("XXXB" );
172
+ }
173
+
174
+ if (portB2 .isConnected ()) {
175
+ portB2Text .setText (portB2 .getVal ().toString ());
176
+ }
177
+ else {
178
+ portB2Text .setText ("XXDC" );
179
+ }
180
+
181
+ if (portB3 .isConnected ()) {
182
+ portB3Text .setText (portB3 .getVal ().toString ());
183
+ }
184
+ else {
185
+ portB3Text .setText ("XXXD" );
186
+ }
187
+
129
188
// Show output/input
130
189
g .setColor (Colors .modulePorts );
131
190
drawBidir (g );
132
191
133
- drawStaticParts (g );
192
+ drawDynamicParts (g );
134
193
}
135
194
136
195
@ Override
@@ -148,7 +207,7 @@ public void propagate() {
148
207
if (portA0 .wasUpdated () || portA1 .wasUpdated ()) {
149
208
if (portA0 .isConnected () && portA1 .isConnected ())
150
209
{
151
- JOptionPane .showMessageDialog (Main .ui .pane , "Error: There must only be one connection to that size of split/merge." );
210
+ JOptionPane .showMessageDialog (Main .ui .pane , "Error: There must only be one connection to that side of a split/merge." );
152
211
Port port = portA0 .wasUpdated ()?portA0 :portA1 ;
153
212
synchronized (Main .sim )
154
213
{
@@ -177,11 +236,11 @@ else if ( portB0.wasUpdated() || portB1.wasUpdated() ||
177
236
a1_val .setBit (0 , b2_val .getBit (0 )); // c0-B0
178
237
179
238
// Resolution of 3-state logic for merges
180
- int val = b2_val .getBit (1 ) | b3_val .getBit (0 );
239
+ int val = BinData . mergeBits ( b2_val .getBit (1 ), b3_val .getBit (0 ) );
181
240
a1_val .setBit (1 , val );
182
241
a0_val .setBit (3 , val );
183
242
184
- val = b0_val .getBit (1 ) | b1_val .getBit (0 );
243
+ val = BinData . mergeBits ( b0_val .getBit (1 ), b1_val .getBit (0 ) );
185
244
a0_val .setBit (1 , val );
186
245
}
187
246
0 commit comments