1010
1111import javax .swing .JOptionPane ;
1212
13+ import com .modsim .modules .parts .VisiblePart ;
1314import com .modsim .modules .ports .BidirPort ;
1415import com .modsim .Main ;
1516import com .modsim .modules .parts .Port ;
@@ -26,6 +27,9 @@ public class SplitMerge extends BaseModule {
2627 private final BidirPort portA0 , portA1 ;
2728 private final BidirPort portB0 , portB1 , portB2 , portB3 ;
2829
30+ private final SSText portA0Text , portA1Text ;
31+ private final SSText portB0Text , portB1Text , portB2Text , portB3Text ;
32+
2933 private final List <BezierCurve > curves ;
3034
3135 public SplitMerge () {
@@ -79,14 +83,22 @@ public SplitMerge() {
7983 cs [8 ] = new BezierCurve (new Vec2 (B + b1 , 23 ), new Vec2 (d - b0 , -23 ), // B1-d0
8084 new Vec2 (B + b1 , -15 ), new Vec2 (d - b0 , 15 ));
8185 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 ()));
8986
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 );
90102 }
91103
92104 @ Override
@@ -95,42 +107,89 @@ public void paintStatic(Graphics2D g) {
95107 g .setColor (Colors .moduleFill );
96108 drawBox (g , 10 );
97109
110+ drawStaticParts (g );
111+ }
112+
113+ @ Override
114+ public void paintDynamic (Graphics2D g ) {
98115 // Show drawing
99116 g .setStroke (new BasicStroke (2 ));
100117 for (int i = 0 ; i < curves .size (); i ++) {
101118 int grad = 0 ;
102119 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 ;
124141 }
125142 g .setColor (new Color (grad , grad , grad ));
126143 curves .get (i ).draw (g );
127144 }
128145
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+
129188 // Show output/input
130189 g .setColor (Colors .modulePorts );
131190 drawBidir (g );
132191
133- drawStaticParts (g );
192+ drawDynamicParts (g );
134193 }
135194
136195 @ Override
@@ -148,7 +207,7 @@ public void propagate() {
148207 if (portA0 .wasUpdated () || portA1 .wasUpdated ()) {
149208 if (portA0 .isConnected () && portA1 .isConnected ())
150209 {
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." );
152211 Port port = portA0 .wasUpdated ()?portA0 :portA1 ;
153212 synchronized (Main .sim )
154213 {
@@ -177,11 +236,11 @@ else if ( portB0.wasUpdated() || portB1.wasUpdated() ||
177236 a1_val .setBit (0 , b2_val .getBit (0 )); // c0-B0
178237
179238 // 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 ) );
181240 a1_val .setBit (1 , val );
182241 a0_val .setBit (3 , val );
183242
184- val = b0_val .getBit (1 ) | b1_val .getBit (0 );
243+ val = BinData . mergeBits ( b0_val .getBit (1 ), b1_val .getBit (0 ) );
185244 a0_val .setBit (1 , val );
186245 }
187246
0 commit comments