@@ -311,6 +311,16 @@ public enum CABViewControlUnits
311
311
LBS
312
312
}
313
313
314
+ public enum DiscreteStates
315
+ {
316
+ LEVER ,
317
+ TWO_STATE ,
318
+ TRI_STATE ,
319
+ MULTI_STATE ,
320
+ COMBINED_CONTROL ,
321
+ CAB_SIGNAL_DISPLAY
322
+ }
323
+
314
324
public class CabViewControls : List < CabViewControl >
315
325
{
316
326
public CabViewControls ( STFReader stf , string basepath )
@@ -322,14 +332,14 @@ public CabViewControls(STFReader stf, string basepath)
322
332
new STFReader . TokenProcessor ( "ortsanimateddisplay" , ( ) => { Add ( new CVCAnimatedDisplay ( stf , basepath ) ) ; } ) ,
323
333
new STFReader . TokenProcessor ( "dial" , ( ) => { Add ( new CVCDial ( stf , basepath ) ) ; } ) ,
324
334
new STFReader . TokenProcessor ( "gauge" , ( ) => { Add ( new CVCGauge ( stf , basepath ) ) ; } ) ,
325
- new STFReader . TokenProcessor ( "lever" , ( ) => { Add ( new CVCDiscrete ( stf , basepath ) ) ; } ) ,
326
- new STFReader . TokenProcessor ( "twostate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath ) ) ; } ) ,
327
- new STFReader . TokenProcessor ( "tristate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath ) ) ; } ) ,
328
- new STFReader . TokenProcessor ( "multistate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath ) ) ; } ) ,
335
+ new STFReader . TokenProcessor ( "lever" , ( ) => { Add ( new CVCDiscrete ( stf , basepath , DiscreteStates . LEVER ) ) ; } ) ,
336
+ new STFReader . TokenProcessor ( "twostate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath , DiscreteStates . TWO_STATE ) ) ; } ) ,
337
+ new STFReader . TokenProcessor ( "tristate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath , DiscreteStates . TRI_STATE ) ) ; } ) ,
338
+ new STFReader . TokenProcessor ( "multistate" , ( ) => { Add ( new CVCDiscrete ( stf , basepath , DiscreteStates . MULTI_STATE ) ) ; } ) ,
329
339
new STFReader . TokenProcessor ( "multistatedisplay" , ( ) => { Add ( new CVCMultiStateDisplay ( stf , basepath ) ) ; } ) ,
330
- new STFReader . TokenProcessor ( "cabsignaldisplay" , ( ) => { Add ( new CVCSignal ( stf , basepath ) ) ; } ) ,
340
+ new STFReader . TokenProcessor ( "cabsignaldisplay" , ( ) => { Add ( new CVCSignal ( stf , basepath , DiscreteStates . CAB_SIGNAL_DISPLAY ) ) ; } ) ,
331
341
new STFReader . TokenProcessor ( "digital" , ( ) => { Add ( new CVCDigital ( stf , basepath ) ) ; } ) ,
332
- new STFReader . TokenProcessor ( "combinedcontrol" , ( ) => { Add ( new CVCDiscrete ( stf , basepath ) ) ; } ) ,
342
+ new STFReader . TokenProcessor ( "combinedcontrol" , ( ) => { Add ( new CVCDiscrete ( stf , basepath , DiscreteStates . COMBINED_CONTROL ) ) ; } ) ,
333
343
new STFReader . TokenProcessor ( "firebox" , ( ) => { Add ( new CVCFirebox ( stf , basepath ) ) ; } ) ,
334
344
new STFReader . TokenProcessor ( "dialclock" , ( ) => { ProcessDialClock ( stf , basepath ) ; } ) ,
335
345
new STFReader . TokenProcessor ( "digitalclock" , ( ) => { Add ( new CVCDigitalClock ( stf , basepath ) ) ; } ) ,
@@ -845,7 +855,7 @@ public class CVCDiscrete : CVCWithFrames
845
855
private int numPositions ;
846
856
private bool canFill = true ;
847
857
848
- public CVCDiscrete ( STFReader stf , string basepath )
858
+ public CVCDiscrete ( STFReader stf , string basepath , DiscreteStates discreteState )
849
859
{
850
860
// try
851
861
{
@@ -1149,6 +1159,15 @@ public CVCDiscrete(STFReader stf, string basepath)
1149
1159
ControlStyle = CABViewControlStyles . WHILE_PRESSED ;
1150
1160
if ( ControlType == CABViewControlTypes . DIRECTION && Orientation == 0 )
1151
1161
Direction = 1 - Direction ;
1162
+
1163
+ switch ( discreteState )
1164
+ {
1165
+ case DiscreteStates . TRI_STATE :
1166
+ MaxValue = 2.0f ; // So that LocomotiveViewerExtensions.GetWebControlValueList() returns right value to web server
1167
+ break ;
1168
+ default :
1169
+ break ;
1170
+ }
1152
1171
}
1153
1172
// catch (Exception error)
1154
1173
// {
@@ -1293,8 +1312,8 @@ protected void ParseCustomParameters(STFReader stf)
1293
1312
#region other controls
1294
1313
public class CVCSignal : CVCDiscrete
1295
1314
{
1296
- public CVCSignal ( STFReader inf , string basepath )
1297
- : base ( inf , basepath )
1315
+ public CVCSignal ( STFReader inf , string basepath , DiscreteStates discreteState )
1316
+ : base ( inf , basepath , discreteState )
1298
1317
{
1299
1318
FramesCount = 8 ;
1300
1319
FramesX = 4 ;
@@ -1308,5 +1327,4 @@ public CVCSignal(STFReader inf, string basepath)
1308
1327
}
1309
1328
}
1310
1329
#endregion
1311
- }
1312
-
1330
+ }
0 commit comments