Exemple #1
0
 public DMIButton(string displayName, bool upType, DriverMachineInterface dmi, bool showButtonBorder) : base(dmi)
 {
     DisplayName      = displayName;
     Enabled          = false;
     UpType           = upType;
     ShowButtonBorder = showButtonBorder;
 }
 public DMITextLabel(string caption, int width, int height, DriverMachineInterface dmi) :
     base(dmi, width, height)
 {
     Caption     = caption.Split('\n');
     CaptionText = new TextPrimitive[Caption.Length];
     SetFont();
     SetText();
 }
 public DMISubwindow(string title, bool fullScreen, DriverMachineInterface dmi) : base(dmi, fullScreen ? 640 : 306, 450)
 {
     WindowTitle         = title;
     FullScreen          = fullScreen;
     CloseButton         = new DMIIconButton("NA_11.bmp", "NA_12.bmp", Viewer.Catalog.GetString("Close"), true, () => dmi.ExitWindow(this), 82, 50, dmi);
     CloseButton.Enabled = true;
     BackgroundColor     = DMI.BlackWhiteTheme ? Color.Black : ColorBackground;
     SetFont();
     AddToLayout(CloseButton, new Point(fullScreen ? 334 : 0, 400));
 }
 public DriverMachineInterfaceRenderer(Viewer viewer, MSTSLocomotive locomotive, CVCScreen control, CabShader shader)
     : base(viewer, locomotive, control, shader)
 {
     Position.X = (float)Control.PositionX;
     Position.Y = (float)Control.PositionY;
     if ((int)Control.Height == 102 && (int)Control.Width == 136)
     {
         // Hack for ETR400 cab, which was built with a bugged size calculation of digital displays
         Control.Height *= 0.75f;
         Control.Width  *= 0.75f;
     }
     DMI = new DriverMachineInterface((int)Control.Height, (int)Control.Width, locomotive, viewer, control);
 }
 public PlanningWindow(DriverMachineInterface dmi) : base(dmi, 246, 300)
 {
     ButtonScaleUp   = new DMIIconButton("NA_03.bmp", "NA_05.bmp", Viewer.Catalog.GetString("Scale Up"), true, ScaleUp, 40, 15, dmi);
     ButtonScaleDown = new DMIIconButton("NA_04.bmp", "NA_06.bmp", Viewer.Catalog.GetString("Scale Down"), true, ScaleDown, 40, 15, dmi)
     {
         ExtendedSensitiveArea = new Rectangle(0, 15, 0, 0)
     };
     ButtonScaleUp.ExtendedSensitiveArea = new Rectangle(0, 0, 0, 15);
     ButtonScaleUp.ShowButtonBorder      = false;
     ButtonScaleDown.ShowButtonBorder    = false;
     ButtonScaleUp.Enabled   = MaxViewingDistanceM > MinZoomDistanceM;
     ButtonScaleDown.Enabled = MaxViewingDistanceM < MaxZoomDistanceM;
     ScaleChanged();
 }
Exemple #6
0
 public TargetDistance(DriverMachineInterface dmi) : base(dmi, 54, 221)
 {
     ScaleChanged();
 }
Exemple #7
0
 public TTIandLSSMArea(DriverMachineInterface dmi) : base(dmi, 54, 54)
 {
 }
 public CircularSpeedGaugeRenderer(Viewer viewer, MSTSLocomotive locomotive, CVCDigital control, CabShader shader)
     : base(viewer, locomotive, control, shader)
 {
     // Height is adjusted to keep compatibility
     DMI = new DriverMachineInterface((int)Control.Width, (int)Control.Height, locomotive, viewer, control);
 }
 public DMIIconButton(string enabledSymbol, string disabledSymbol, string displayName, bool upType, Action pressedAction, int width, int height, DriverMachineInterface dmi) :
     base(displayName, upType, pressedAction, width, height, dmi, true)
 {
     DisabledSymbol = disabledSymbol;
     EnabledSymbol  = enabledSymbol;
     SetIcon();
 }
 public DMIButton(string displayName, bool upType, Action pressedAction, int width, int height, DriverMachineInterface dmi, bool showButtonBorder = false) : base(dmi, width, height)
 {
     DisplayName      = displayName;
     Enabled          = false;
     UpType           = upType;
     PressedAction    = pressedAction;
     ShowButtonBorder = showButtonBorder;
 }
 protected DMIWindow(DriverMachineInterface dmi, int width, int height) : base(dmi, width, height)
 {
 }
 public DMIArea(DriverMachineInterface dmi, int width, int height)
 {
     DMI    = dmi;
     Width  = width;
     Height = height;
 }
 public DMIArea(DriverMachineInterface dmi)
 {
     DMI = dmi;
 }
 public ETCSDefaultWindow(DriverMachineInterface dmi, CabViewControl control) : base(dmi, dmi.Width, dmi.Height)
 {
     if (dmi.CurrentDMIMode == DMIMode.GaugeOnly)
     {
         var dig = control as CVCDigital;
         CircularSpeedGauge = new CircularSpeedGauge(
             (int)dig.MaxValue,
             dig.Units != CABViewControlUnits.MILES_PER_HOUR,
             dig.Units != CABViewControlUnits.NONE,
             dig.MaxValue == 240 || dig.MaxValue == 260,
             (int)dig.MinValue,
             DMI);
         AddToLayout(CircularSpeedGauge, new Point(0, 0));
         return;
     }
     if (dmi.CurrentDMIMode != DMIMode.PlanningArea)
     {
         var param    = (control as CVCScreen).CustomParameters;
         int maxSpeed = 400;
         if (param.ContainsKey("maxspeed"))
         {
             int.TryParse(param["maxspeed"], out maxSpeed);
         }
         int maxVisibleSpeed = maxSpeed;
         if (param.ContainsKey("maxvisiblespeed"))
         {
             int.TryParse(param["maxvisiblespeed"], out maxVisibleSpeed);
         }
         CircularSpeedGauge = new CircularSpeedGauge(
             maxSpeed,
             control.Units != CABViewControlUnits.MILES_PER_HOUR,
             param.ContainsKey("displayunits") && param["displayunits"] == "1",
             maxSpeed == 240 || maxSpeed == 260,
             maxVisibleSpeed,
             dmi
             );
         TTIandLSSMArea           = new TTIandLSSMArea(dmi);
         TargetDistance           = new TargetDistance(dmi);
         MessageArea              = new MessageArea(dmi);
         CircularSpeedGauge.Layer = -1;
         TargetDistance.Layer     = -1;
         TTIandLSSMArea.Layer     = -1;
         MessageArea.Layer        = -1;
         AddToLayout(CircularSpeedGauge, new Point(54, DMI.IsSoftLayout ? 0 : 15));
         AddToLayout(TTIandLSSMArea, new Point(0, DMI.IsSoftLayout ? 0 : 15));
         AddToLayout(TargetDistance, new Point(0, 54 + (DMI.IsSoftLayout ? 0 : 15)));
         AddToLayout(MessageArea, new Point(54, DMI.IsSoftLayout ? 350 : 365));
         AddToLayout(MessageArea.ButtonScrollUp, new Point(54 + 234, DMI.IsSoftLayout ? 350 : 365));
         AddToLayout(MessageArea.ButtonScrollDown, new Point(54 + 234, MessageArea.Height / 2 + (DMI.IsSoftLayout ? 350 : 365)));
     }
     if (dmi.CurrentDMIMode != DMIMode.SpeedArea)
     {
         // Calculate start position of the planning area when a two-screen display is used
         // Real width of the left area in ETCS specs is 306 px, however in order to have
         // both screens with the same size I assumed both have 334 px
         // To be checked
         int startPos = dmi.CurrentDMIMode == DMIMode.FullSize ? 334 : (334 - 306) / 2;
         PlanningWindow = new PlanningWindow(dmi);
         MenuBar        = new MenuBar(dmi);
         AddToLayout(PlanningWindow, new Point(startPos, DMI.IsSoftLayout ? 0 : 15));
         AddToLayout(PlanningWindow.ButtonScaleDown, new Point(startPos, DMI.IsSoftLayout ? 0 : 15));
         AddToLayout(PlanningWindow.ButtonScaleUp, new Point(startPos, 285 + (DMI.IsSoftLayout ? 0 : 15)));
         foreach (int i in Enumerable.Range(0, MenuBar.Buttons.Count))
         {
             AddToLayout(MenuBar.Buttons[i], new Point(580, 15 + 50 * i));
         }
     }
 }
Exemple #15
0
        public CircularSpeedGauge(int maxSpeed, bool unitMetric, bool unitVisible, bool dialQuarterLines, int maxVisibleScale, DriverMachineInterface dmi) : base(dmi, 280, 300)
        {
            UnitVisible = unitVisible;
            SetUnit(unitMetric);

            DialQuarterLines = dialQuarterLines;
            MaxSpeed         = maxSpeed;
            MaxVisibleScale  = maxVisibleScale;

            SetRange(MaxSpeed);

            CurrentSpeed = new TextPrimitive[3];
            foreach (int i in Enumerable.Range(0, CurrentSpeed.Length))
            {
                CurrentSpeed[i] = new TextPrimitive(new Point(CurrentSpeedPosition[i], CurrentSpeedPosition[3]), Color.Black, "0", FontCurrentSpeed);
            }

            ReleaseSpeed = new TextPrimitive(ReleaseSpeedPosition, ColorGrey, String.Empty, FontReleaseSpeed);

            if (NeedleTextureData == null)
            {
                NeedleTextureData = new Color[128 * 16];

                // Needle texture is according to ETCS specification
                foreach (int v in Enumerable.Range(0, 128))
                {
                    foreach (int u in Enumerable.Range(0, 16))
                    {
                        NeedleTextureData[u + 16 * v] = (
                            v <= 15 && 5 < u && u < 9 ||
                            15 < v && v <= 23 && 5f - (float)(v - 15) / 8f * 3f < u && u < 9f + (float)(v - 15) / 8f * 3f ||
                            23 < v && v < 82 && 2 < u && u < 12
                            ) ? Color.White : Color.Transparent;
                    }
                }
            }
        }
 public DMITextButton(string caption, string displayName, bool upType, Action pressedAction, int width, int height, DriverMachineInterface dmi, int fontHeight = 12) :
     base(displayName, upType, pressedAction, width, height, dmi, true)
 {
     Caption          = caption.Split('\n');
     CaptionText      = new TextPrimitive[Caption.Length];
     ConfirmerCaption = caption;
     FontHeightButton = fontHeight;
     SetFont();
     SetText();
 }
Exemple #17
0
 public ETCSDefaultWindow(DriverMachineInterface dmi, CabViewControl control) : base(dmi, 640, 480)
 {
     if (control is CVCDigital)
     {
         var dig = control as CVCDigital;
         CircularSpeedGauge = new CircularSpeedGauge(
             (int)dig.MaxValue,
             dig.Units != CABViewControlUnits.MILES_PER_HOUR,
             dig.Units != CABViewControlUnits.NONE,
             dig.MaxValue == 240 || dig.MaxValue == 260,
             (int)dig.MinValue,
             DMI);
     }
     else
     {
         var param    = (control as CVCScreen).CustomParameters;
         int maxSpeed = 400;
         if (param.ContainsKey("maxspeed"))
         {
             int.TryParse(param["maxspeed"], out maxSpeed);
         }
         int maxVisibleSpeed = maxSpeed;
         if (param.ContainsKey("maxvisiblespeed"))
         {
             int.TryParse(param["maxvisiblespeed"], out maxVisibleSpeed);
         }
         CircularSpeedGauge = new CircularSpeedGauge(
             maxSpeed,
             control.Units != CABViewControlUnits.MILES_PER_HOUR,
             param.ContainsKey("displayunits") && param["displayunits"] == "1",
             maxSpeed == 240 || maxSpeed == 260,
             maxVisibleSpeed,
             dmi
             );
     }
     if (DMI.GaugeOnly)
     {
         AddToLayout(CircularSpeedGauge, new Point(0, 0));
         return;
     }
     PlanningWindow           = new PlanningWindow(dmi);
     TTIandLSSMArea           = new TTIandLSSMArea(dmi);
     TargetDistance           = new TargetDistance(dmi);
     MessageArea              = new MessageArea(dmi);
     MenuBar                  = new MenuBar(dmi);
     CircularSpeedGauge.Layer = -1;
     TargetDistance.Layer     = -1;
     TTIandLSSMArea.Layer     = -1;
     MessageArea.Layer        = -1;
     AddToLayout(CircularSpeedGauge, new Point(54, DMI.IsSoftLayout ? 0 : 15));
     AddToLayout(PlanningWindow, new Point(334, DMI.IsSoftLayout ? 0 : 15));
     AddToLayout(PlanningWindow.ButtonScaleDown, new Point(334, DMI.IsSoftLayout ? 0 : 15));
     AddToLayout(PlanningWindow.ButtonScaleUp, new Point(334, 285 + (DMI.IsSoftLayout ? 0 : 15)));
     AddToLayout(TTIandLSSMArea, new Point(0, DMI.IsSoftLayout ? 0 : 15));
     AddToLayout(TargetDistance, new Point(0, 54 + (DMI.IsSoftLayout ? 0 : 15)));
     AddToLayout(MessageArea, new Point(54, DMI.IsSoftLayout ? 350 : 365));
     AddToLayout(MessageArea.ButtonScrollUp, new Point(54 + 234, DMI.IsSoftLayout ? 350 : 365));
     AddToLayout(MessageArea.ButtonScrollDown, new Point(54 + 234, MessageArea.Height / 2 + (DMI.IsSoftLayout ? 350 : 365)));
     foreach (int i in Enumerable.Range(0, MenuBar.Buttons.Count))
     {
         AddToLayout(MenuBar.Buttons[i], new Point(580, 15 + 50 * i));
     }
 }