Example #1
0
        public Configuration SaveConfiguration(Dictionarys dicts)
        {
            var returnConf = new Configuration
                                 {
                                         Name = Name,
                                         FileLocation = FileLocation,
                                         DisplayConfigurations = new List<DisplayConfiguration>(),
                                         ControllerConfigurations = new List<ControllerConfiguration>(),
                                         TMDisplaySettings =
                                                 new TMDisplaySettings
                                                     {
                                                             ColourDeltaByDD = this.ColourDeltaByDD,
                                                             ShiftIntensity = this.ShiftIntensity,
                                                             Intensity = this.Intensity,
                                                             ShiftIntensityType =
                                                                     this.ShiftIntensityType,
                                                             ShiftIntensityAmount =
                                                                     this.ShiftIntensityAmount,
                                                             ShowHeaders = this.ShowHeader,
                                                             HeaderDisplayTime =
                                                                     this.HeaderDisplayTime + 1,
                                                             QuickInfoDisplayTime =
                                                                     this.QuickInfoDisplayTime + 1,
                                                             LapDisplayTime =
                                                                     this.LapTimeDisplayTime + 1,
                                                             DeltaRange = this.DeltaRange + 1,
                                                             DeltaMessageScreen =
                                                                     this.DeltaMessageScreen,
                                                             DeltaLightsOnDefault =
                                                                     this.DeltaLightsOnDefault,
                                                             WarningTextDisplayTime = this.WarningTextDisplayTime + 1,
                                                             QuickInfoLightsColour = this.QuickInfoLightsColour
                                                     },
                                         SerialPortSettings =
                                                 new SerialPortConfiguration
                                                     {
                                                             PreferredComPort =
                                                                     this
                                                                     .PreferredComPort,
                                                             SerialPortSpeed =
                                                                     AdvancedOptions
                                                                     .ParseSerialSpeedString
                                                                     (
                                                                             this
                                                                     .SerialPortSpeed),
                                                             UseCustomSerialSpeed =
                                                                     this
                                                                     .UseCustomSerialSpeed
                                                     },
                                         OtherSettings =
                                                 new OtherSettings
                                                     {
                                                             FuelCalculationLaps =
                                                                     this.FuelCalculationLaps + 2,
                                                             UseCustomFuelCalculationOptions =
                                                                     this
                                                                     .UseCustomFuelCalculationOptions,
                                                             UseWeightedFuelCalculations =
                                                                     this
                                                                     .UseWeightedFuelCalculations
                                                     },
                                         RefreshRates =
                                                 new RefreshRates
                                                     {
                                                             DisplayRefreshRate =
                                                                     AdvancedOptions
                                                                     .ParseRefreshRatesString(
                                                                             this
                                                                     .DisplayRefreshRate),
                                                             LEDRefreshRate =
                                                                     AdvancedOptions
                                                                     .ParseRefreshRatesString(
                                                                             this.LEDRefreshRate)
                                                     },
                                         AdvancedSettings =
                                                 new AdvancedSettings
                                                     {
                                                             LogArduinoMessages =
                                                                     this.LogArduinoMessages
                                                     }
                                 };
            if(returnConf.TMDisplaySettings.DeltaRange <= 0)
            {
                returnConf.TMDisplaySettings.DeltaRange = 1;
            }
            if (!UseCustomSerialSpeed) //Calculate and Auto Set Serial Speed
            {
                int numberTM1638 = 0;
                int numberTM1640 = 0;
                foreach (var unit in DisplayUnitConfigurations)
                {
                    if (unit.IsTM1640)
                    {
                        numberTM1640++;

                    }
                    else
                    {
                        numberTM1638++;
                    }

                }
                returnConf.SerialPortSettings.SerialPortSpeed = AdvancedOptions.CalculateRecommendSerialSpeed(
                returnConf.RefreshRates.DisplayRefreshRate,returnConf.RefreshRates.LEDRefreshRate, numberTM1638, numberTM1640);
            }
            //int controllerCount = 0;
            foreach (ControllerButtonConfiguration item in ControllerConfigurations)
            {
                var temp = new ControllerConfiguration();
                for (int y = 0; y < Constants.MaxNumberJoystickButtons; y++)
                {
                    var butFuncTemp = ButtonFunctionsEnum.None;

                    foreach (var butFunc in dicts.ButtonFunctions)
                    {
                        if (butFunc.Value.Name == item.ButtonFunctions[y])
                        {
                            butFuncTemp = butFunc.Key;
                        }
                    }
                    temp.ButtonFunctions[y] = butFuncTemp;
                    temp.ButtonOptions[y] = item.ButtonOptions[y];
                    temp.ButtonOptionsScreens[y] = item.ButtonOptionsScreens[y];
                    temp.ButtonNumbers[y] = item.ButtonNumbers[y];
                    temp.DeviceGuid = item.DeviceGuid;
                    temp.Selected = item.Selected;
                }
                //controllerCount++;
                returnConf.ControllerConfigurations.Add(temp);
            }
            returnConf.NumberControllers = returnConf.ControllerConfigurations.Count;
            foreach (DisplayUnitConfiguration displayConf in DisplayUnitConfigurations)
            {
                var temp = new DisplayConfiguration(false)
                    {
                        NumScreens = displayConf.NumScreens + 1,
                        Inverted = displayConf.Inverted,
                        IsTM1640 = displayConf.IsTM1640,
                        SwitchLEDs = displayConf.SwitchLEDs,
                        ShowDC = displayConf.ShowDC,
                        DCDisplayTime = displayConf.DCDisplayTime,
                        ShowLap = displayConf.ShowLap,
                        FFBClippingLights = displayConf.LEDsConfigurations.FFBClippingLights,
                        FFBClippingScreen = displayConf.LEDsConfigurations.FFBClippingScreen + 1,
                        PitLights = displayConf.LEDsConfigurations.PitLights,
                        ShiftClumps = displayConf.LEDsConfigurations.ShiftClumps,
                        RevLimiterLights = displayConf.LEDsConfigurations.RevLimiterLights,
                        ShowShiftLights = displayConf.LEDsConfigurations.ShowShiftLights,
                        DeltaLightsShow = displayConf.LEDsConfigurations.DeltaLightsShow,
                        ShowEngineWarnings = displayConf.ShowEngineWarnings
                    };
                List<Screen> screenTemp = displayConf.Screens;
                foreach (Screen screen in screenTemp)
                {
                    int place = 0;
                    while (place < screen.Variables.Count)
                    {
                        if (screen.Variables[place] == null || screen.Variables[place] == "")
                        {
                            screen.Variables.RemoveAt(place);
                        }
                        else
                        {
                            place++;
                        }
                    }
                    if (screen.Variables.Count == 0)
                    {
                        screen.Variables.Add("Space");
                    }
                }
                temp.Screens = displayConf.Screens;
                try
                {
                    temp.WarningType = dicts.WarningTypes[displayConf.WarningType];
                }
                catch
                {
                    Enum.TryParse(displayConf.WarningType, out temp.WarningType);
                }
                try
                {
                    temp.LapStyle = dicts.LapDisplayStyles[displayConf.LapStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LapStyle, out temp.LapStyle);
                }
                try
                {
                    temp.PitLimiterStyle = dicts.PitFlashStyles[displayConf.LEDsConfigurations.PitLimiterStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterStyle, out temp.PitLimiterStyle);
                }
                try
                {
                    temp.PitLimiterSpeed = dicts.PitFlashSpeeds[displayConf.LEDsConfigurations.PitLimiterSpeed];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterSpeed, out temp.PitLimiterSpeed);
                }
                try
                {
                    temp.ShiftLightStyle = dicts.ShiftStyles[displayConf.LEDsConfigurations.ShiftLightStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.ShiftLightStyle, out temp.ShiftLightStyle);
                }
                try
                {
                    temp.RevLimiterStyle = dicts.RevFlashStyles[displayConf.LEDsConfigurations.RevLimiterStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.RevLimiterStyle, out temp.RevLimiterStyle);
                }
                temp.MatchCarShiftStyle = displayConf.LEDsConfigurations.MatchCarShiftLights;
                temp.MatchRedShift = displayConf.LEDsConfigurations.MatchRedShift;
                try
                {
                    temp.MatchCarShiftStyleOption =
                        dicts.MatchCarShiftOptions[displayConf.LEDsConfigurations.MatchCarShiftOptions];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.MatchCarShiftOptions, out temp.MatchCarShiftStyleOption);
                }
                temp.DeltaLightsShow = displayConf.LEDsConfigurations.DeltaLightsShow;
                try
                {
                    temp.DeltaLightsPosition =
                        dicts.DeltaLightsPositionOptions[displayConf.LEDsConfigurations.DeltaLightsPosition];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.DeltaLightsPosition, out temp.DeltaLightsPosition);
                }
                for (int y = 0; y < Constants.NumberButtonsOnTm1638; y++)
                {
                    var butFuncTemp = ButtonFunctionsEnum.None;

                    foreach (var butFunc in dicts.ButtonFunctions)
                    {
                        if (butFunc.Value.Name == displayConf.ButtonConfigurations.ButtonFunctions[y])
                        {
                            butFuncTemp = butFunc.Key;
                        }
                    }
                    temp.ButtonFunctions[y] = butFuncTemp;
                    temp.ButtonOptions[y] = displayConf.ButtonConfigurations.ButtonOptions[y];
                    temp.ButtonOptionsScreens[y] = displayConf.ButtonConfigurations.ButtonOptionsScreens[y];
                }
                returnConf.DisplayConfigurations.Add(temp);
            }
            return returnConf;
        }
Example #2
0
        public static bool LoadConfigurationFromFile(string fileLocation, out Configuration loaded)
        {
            var newConf = new Configuration {
                FileLocation = fileLocation
            };
            bool fileReadOk         = true;
            int  currentDisplayUnit = 0;
            int  currentController  = 0;
            int  currentButton      = 0;
            int  currentScreen      = 0;

            try
            {
                using (var sr = new StreamReader(fileLocation))
                {
                    bool fileEnded = false;
                    while (sr.EndOfStream == false && !fileEnded)
                    {
                        string line = sr.ReadLine();
                        // ReSharper disable StringIndexOfIsCultureSpecific.1
                        if (line == null)
                        {
                            continue;
                        }
                        int commaLoc = line.IndexOf(",");
                        // ReSharper restore StringIndexOfIsCultureSpecific.1
                        if (commaLoc <= 0)
                        {
                            continue;
                        }
                        string parameter = line.Substring(0, commaLoc);
                        string value     = line.Substring(commaLoc + 1);

                        ButtonFunctionsEnum temp;
                        switch (parameter)
                        {
                        //ButtonOptionsScreens
                        case "ConfName":
                            newConf.Name = value;
                            break;

                        case "ComPort":
                            int.TryParse(value, out newConf.SerialPortSettings.PreferredComPort);
                            break;

                        case "SerialSpeed":
                            int.TryParse(value, out newConf.SerialPortSettings.SerialPortSpeed);
                            break;

                        case "LogArduinoMessages":
                            Boolean.TryParse(value, out newConf.AdvancedSettings.LogArduinoMessages);
                            break;

                        case "UseCustomSerialSpeed":
                            Boolean.TryParse(value, out newConf.SerialPortSettings.UseCustomSerialSpeed);
                            break;

                        case "DisplayRefreshRate":
                            int.TryParse(value, out newConf.RefreshRates.DisplayRefreshRate);
                            break;

                        case "LEDRefreshRate":
                            int.TryParse(value, out newConf.RefreshRates.LEDRefreshRate);
                            break;

                        case "UseCustomFuelCalculations":
                            Boolean.TryParse(value, out newConf.OtherSettings.UseCustomFuelCalculationOptions);
                            break;

                        case "UseWeightedFuelCalculation":
                            Boolean.TryParse(value, out newConf.OtherSettings.UseWeightedFuelCalculations);
                            break;

                        case "CustomFuelLaps":
                            int.TryParse(value, out newConf.OtherSettings.FuelCalculationLaps);
                            break;

                        case "ButtonFunction1":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[0] = temp;
                            }
                            break;

                        case "ButtonFunction2":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[1] = temp;
                            }
                            break;

                        case "ButtonFunction3":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[2] = temp;
                            }
                            break;

                        case "ButtonFunction4":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[3] = temp;
                            }
                            break;

                        case "ButtonFunction5":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[4] = temp;
                            }
                            break;

                        case "ButtonFunction6":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[5] = temp;
                            }
                            break;

                        case "ButtonFunction7":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[6] = temp;
                            }
                            break;

                        case "ButtonFunction8":
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[7] = temp;
                            }
                            break;

                        case "ButtonOption1":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[0] = value;
                            break;

                        case "ButtonOption2":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[1] = value;
                            break;

                        case "ButtonOption3":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[2] = value;
                            break;

                        case "ButtonOption4":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[3] = value;
                            break;

                        case "ButtonOption5":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[4] = value;
                            break;

                        case "ButtonOption6":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[5] = value;
                            break;

                        case "ButtonOption7":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[6] = value;
                            break;

                        case "ButtonOption8":
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[7] = value;
                            break;     ///////

                        case "ButtonOptionScreens1":
                            int buttonOptionScreenInt1;
                            int.TryParse(value, out buttonOptionScreenInt1);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[0] =
                                buttonOptionScreenInt1;
                            break;

                        case "ButtonOptionScreens2":
                            int buttonOptionScreenInt2;
                            int.TryParse(value, out buttonOptionScreenInt2);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[1] =
                                buttonOptionScreenInt2;
                            break;

                        case "ButtonOptionScreens3":
                            int buttonOptionScreenInt3;
                            int.TryParse(value, out buttonOptionScreenInt3);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[2] =
                                buttonOptionScreenInt3;
                            break;

                        case "ButtonOptionScreens4":
                            int buttonOptionScreenInt4;
                            int.TryParse(value, out buttonOptionScreenInt4);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[3] =
                                buttonOptionScreenInt4;
                            break;

                        case "ButtonOptionScreens5":
                            int buttonOptionScreenInt5;
                            int.TryParse(value, out buttonOptionScreenInt5);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[4] =
                                buttonOptionScreenInt5;
                            break;

                        case "ButtonOptionScreens6":
                            int buttonOptionScreenInt6;
                            int.TryParse(value, out buttonOptionScreenInt6);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[5] =
                                buttonOptionScreenInt6;
                            break;

                        case "ButtonOptionScreens7":
                            int buttonOptionScreenInt7;
                            int.TryParse(value, out buttonOptionScreenInt7);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[6] =
                                buttonOptionScreenInt7;
                            break;

                        case "ButtonOptionScreens8":
                            int buttonOptionScreenInt8;
                            int.TryParse(value, out buttonOptionScreenInt8);
                            newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[7] =
                                buttonOptionScreenInt8;
                            break;

                        case "FFBClipLights":
                            Boolean.TryParse(value,
                                             out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingLights);
                            break;

                        case "FFBClipScreen":
                            Int32.TryParse(value,
                                           out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingScreen);
                            break;

                        case "HeaderDisplayTime":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.HeaderDisplayTime);
                            break;

                        case "LapDisplayTime":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.LapDisplayTime);
                            break;

                        case "ShowEngineWarnings":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowEngineWarnings);
                            break;

                        case "WarningType":
                            Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].WarningType);
                            break;

                        case "LapStyle":
                            Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].LapStyle);
                            break;

                        case "PitLights":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].PitLights);
                            break;

                        case "ShiftClumps":
                            Boolean.TryParse(value,
                                             out newConf.DisplayConfigurations[currentDisplayUnit].ShiftClumps);
                            break;

                        case "PitLimiterSpeed":
                            Enum.TryParse(value,
                                          out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterSpeed);
                            break;

                        case "PitLimiterStyle":
                            Enum.TryParse(value,
                                          out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterStyle);
                            break;

                        case "QuickInfoDisplayTime":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.QuickInfoDisplayTime);
                            break;

                        case "RevLimiterLights":
                            Boolean.TryParse(value,
                                             out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterLights);
                            break;

                        case "RevLimiterStyle":
                            Enum.TryParse(value,
                                          out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterStyle);
                            break;

                        case "ShiftLightStyle":
                            Enum.TryParse(value,
                                          out newConf.DisplayConfigurations[currentDisplayUnit].ShiftLightStyle);
                            break;

                        case "MatchCarShiftStyle":
                            Boolean.TryParse(
                                value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyle);
                            break;

                        case "MatchCarShiftConfiguration":
                            Enum.TryParse(
                                value,
                                out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyleOption);
                            break;

                        case "MatchRedShift":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchRedShift);
                            break;

                        case "ShowHeaders":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.ShowHeaders);
                            break;

                        case "ColourDeltaByDD":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.ColourDeltaByDD);
                            break;

                        case "DeltaLightsOnDefault":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.DeltaLightsOnDefault);
                            break;

                        case "DeltamessageScreen":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaMessageScreen);
                            break;

                        case "DeltaRange":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaRange);
                            break;

                        case "ShowLap":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowLap);
                            break;

                        case "Inverted":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].Inverted);
                            break;

                        case "TM1640":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].IsTM1640);
                            break;

                        case "DeltaLightsPosition":
                            Enum.TryParse(
                                value,
                                out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsPosition);
                            break;

                        case "DeltaLightsShow":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsShow);
                            break;

                        case "SwitchLEDs":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].SwitchLEDs);
                            break;

                        case "ShowDC":
                            Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowDC);
                            break;

                        case "DCDisplayTime":
                            Int32.TryParse(value,
                                           out newConf.DisplayConfigurations[currentDisplayUnit].DCDisplayTime);
                            break;

                        case "ShowShiftLights":
                            Boolean.TryParse(value,
                                             out newConf.DisplayConfigurations[currentDisplayUnit].ShowShiftLights);
                            break;

                        case "NumScreens":
                            Int32.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].NumScreens);
                            break;

                        case "Intensity":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.Intensity);
                            break;

                        case "ShiftIntensity":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensity);
                            break;

                        case "ShiftIntensityType":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityType);
                            break;

                        case "WarningTextDisplayTime":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.WarningTextDisplayTime);
                            break;

                        case "QuickInfoLightsColour":
                            Boolean.TryParse(value, out newConf.TMDisplaySettings.QuickInfoLightsColour);
                            break;

                        case "ShiftIntensityAmount":
                            Int32.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityAmount);
                            break;

                        case "ScreenNumber":
                            Int32.TryParse(value, out currentScreen);
                            if (newConf.DisplayConfigurations[currentDisplayUnit].Screens.Count <= currentScreen)
                            {
                                var tempScreen = new Screen();
                                tempScreen.Variables.Clear();
                                newConf.DisplayConfigurations[currentDisplayUnit].Screens.Add(tempScreen);
                            }
                            break;

                        case "DisplayUnit":
                            Int32.TryParse(value, out currentDisplayUnit);
                            if (newConf.DisplayConfigurations.Count <= currentDisplayUnit)
                            {
                                var unitTemp = new DisplayConfiguration(true);
                                unitTemp.Screens.Clear();
                                newConf.DisplayConfigurations.Add(unitTemp);
                            }
                            currentScreen = 0;
                            break;

                        case "UseCustomHeader":
                            bool tempUch;
                            Boolean.TryParse(value, out tempUch);
                            newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].UseCustomHeader = tempUch;
                            break;

                        case "CustomHeader":
                            newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].CustomHeader = value;
                            break;

                        case "Variable":
                            newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].Variables.Add(
                                value);
                            break;

                        case "ControllerNumber":
                            currentButton = -1;
                            Int32.TryParse(value, out currentController);
                            if (newConf.ControllerConfigurations.Count <= currentController)
                            {
                                var controllerTemp = new ControllerConfiguration();
                                newConf.ControllerConfigurations.Add(controllerTemp);
                            }
                            break;

                        case "DeviceGuid":
                            Guid.TryParse(value, out newConf.ControllerConfigurations[currentController].DeviceGuid);
                            break;

                        case "ConButtonFunction":
                            currentButton++;
                            if (Enum.TryParse(value, out temp))
                            {
                                newConf.ControllerConfigurations[currentController].ButtonFunctions[currentButton] =
                                    temp;
                            }
                            break;

                        case "ConButtonOption":
                            newConf.ControllerConfigurations[currentController].ButtonOptions[currentButton] = value;
                            break;

                        case "ConButtonOptionScreens":
                            int conButtonOptionScreenInt1;
                            int.TryParse(value, out conButtonOptionScreenInt1);
                            newConf.ControllerConfigurations[currentController].ButtonOptionsScreens[currentButton]
                                =
                                    conButtonOptionScreenInt1;
                            break;

                        case "ConButtonNumber":
                            int conButtonNumberInt1;
                            int.TryParse(value, out conButtonNumberInt1);
                            newConf.ControllerConfigurations[currentController].ButtonNumbers[currentButton] =
                                conButtonNumberInt1;
                            break;

                        case "ContSelected":
                            Boolean.TryParse(value, out newConf.ControllerConfigurations[currentController].Selected);
                            break;

                        case "END":
                            fileEnded = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(String.Format("The file could not be read: {0}", e.Message), "File Read Error");
                fileReadOk = false;
            }
            loaded = fileReadOk ? newConf : null;
            return(fileReadOk);
        }
Example #3
0
        public Configuration SaveConfiguration(Dictionarys dicts)
        {
            var returnConf = new Configuration
            {
                Name                     = Name,
                FileLocation             = FileLocation,
                DisplayConfigurations    = new List <DisplayConfiguration>(),
                ControllerConfigurations = new List <ControllerConfiguration>(),
                TMDisplaySettings        =
                    new TMDisplaySettings
                {
                    ColourDeltaByDD    = this.ColourDeltaByDD,
                    ShiftIntensity     = this.ShiftIntensity,
                    Intensity          = this.Intensity,
                    ShiftIntensityType =
                        this.ShiftIntensityType,
                    ShiftIntensityAmount =
                        this.ShiftIntensityAmount,
                    ShowHeaders       = this.ShowHeader,
                    HeaderDisplayTime =
                        this.HeaderDisplayTime + 1,
                    QuickInfoDisplayTime =
                        this.QuickInfoDisplayTime + 1,
                    LapDisplayTime =
                        this.LapTimeDisplayTime + 1,
                    DeltaRange         = this.DeltaRange + 1,
                    DeltaMessageScreen =
                        this.DeltaMessageScreen,
                    DeltaLightsOnDefault =
                        this.DeltaLightsOnDefault,
                    WarningTextDisplayTime = this.WarningTextDisplayTime + 1,
                    QuickInfoLightsColour  = this.QuickInfoLightsColour
                },
                SerialPortSettings =
                    new SerialPortConfiguration
                {
                    PreferredComPort =
                        this
                        .PreferredComPort,
                    SerialPortSpeed =
                        AdvancedOptions
                        .ParseSerialSpeedString
                        (
                            this
                            .SerialPortSpeed),
                    UseCustomSerialSpeed =
                        this
                        .UseCustomSerialSpeed
                },
                OtherSettings =
                    new OtherSettings
                {
                    FuelCalculationLaps =
                        this.FuelCalculationLaps + 2,
                    UseCustomFuelCalculationOptions =
                        this
                        .UseCustomFuelCalculationOptions,
                    UseWeightedFuelCalculations =
                        this
                        .UseWeightedFuelCalculations
                },
                RefreshRates =
                    new RefreshRates
                {
                    DisplayRefreshRate =
                        AdvancedOptions
                        .ParseRefreshRatesString(
                            this
                            .DisplayRefreshRate),
                    LEDRefreshRate =
                        AdvancedOptions
                        .ParseRefreshRatesString(
                            this.LEDRefreshRate)
                },
                AdvancedSettings =
                    new AdvancedSettings
                {
                    LogArduinoMessages =
                        this.LogArduinoMessages
                }
            };

            if (returnConf.TMDisplaySettings.DeltaRange <= 0)
            {
                returnConf.TMDisplaySettings.DeltaRange = 1;
            }
            if (!UseCustomSerialSpeed) //Calculate and Auto Set Serial Speed
            {
                int numberTM1638 = 0;
                int numberTM1640 = 0;
                foreach (var unit in DisplayUnitConfigurations)
                {
                    if (unit.IsTM1640)
                    {
                        numberTM1640++;
                    }
                    else
                    {
                        numberTM1638++;
                    }
                }
                returnConf.SerialPortSettings.SerialPortSpeed = AdvancedOptions.CalculateRecommendSerialSpeed(
                    returnConf.RefreshRates.DisplayRefreshRate, returnConf.RefreshRates.LEDRefreshRate, numberTM1638, numberTM1640);
            }
            //int controllerCount = 0;
            foreach (ControllerButtonConfiguration item in ControllerConfigurations)
            {
                var temp = new ControllerConfiguration();
                for (int y = 0; y < Constants.MaxNumberJoystickButtons; y++)
                {
                    var butFuncTemp = ButtonFunctionsEnum.None;

                    foreach (var butFunc in dicts.ButtonFunctions)
                    {
                        if (butFunc.Value.Name == item.ButtonFunctions[y])
                        {
                            butFuncTemp = butFunc.Key;
                        }
                    }
                    temp.ButtonFunctions[y]      = butFuncTemp;
                    temp.ButtonOptions[y]        = item.ButtonOptions[y];
                    temp.ButtonOptionsScreens[y] = item.ButtonOptionsScreens[y];
                    temp.ButtonNumbers[y]        = item.ButtonNumbers[y];
                    temp.DeviceGuid = item.DeviceGuid;
                    temp.Selected   = item.Selected;
                }
                //controllerCount++;
                returnConf.ControllerConfigurations.Add(temp);
            }
            returnConf.NumberControllers = returnConf.ControllerConfigurations.Count;
            foreach (DisplayUnitConfiguration displayConf in DisplayUnitConfigurations)
            {
                var temp = new DisplayConfiguration(false)
                {
                    NumScreens         = displayConf.NumScreens + 1,
                    Inverted           = displayConf.Inverted,
                    IsTM1640           = displayConf.IsTM1640,
                    SwitchLEDs         = displayConf.SwitchLEDs,
                    ShowDC             = displayConf.ShowDC,
                    DCDisplayTime      = displayConf.DCDisplayTime,
                    ShowLap            = displayConf.ShowLap,
                    FFBClippingLights  = displayConf.LEDsConfigurations.FFBClippingLights,
                    FFBClippingScreen  = displayConf.LEDsConfigurations.FFBClippingScreen + 1,
                    PitLights          = displayConf.LEDsConfigurations.PitLights,
                    ShiftClumps        = displayConf.LEDsConfigurations.ShiftClumps,
                    RevLimiterLights   = displayConf.LEDsConfigurations.RevLimiterLights,
                    ShowShiftLights    = displayConf.LEDsConfigurations.ShowShiftLights,
                    DeltaLightsShow    = displayConf.LEDsConfigurations.DeltaLightsShow,
                    ShowEngineWarnings = displayConf.ShowEngineWarnings
                };
                List <Screen> screenTemp = displayConf.Screens;
                foreach (Screen screen in screenTemp)
                {
                    int place = 0;
                    while (place < screen.Variables.Count)
                    {
                        if (screen.Variables[place] == null || screen.Variables[place] == "")
                        {
                            screen.Variables.RemoveAt(place);
                        }
                        else
                        {
                            place++;
                        }
                    }
                    if (screen.Variables.Count == 0)
                    {
                        screen.Variables.Add("Space");
                    }
                }
                temp.Screens = displayConf.Screens;
                try
                {
                    temp.WarningType = dicts.WarningTypes[displayConf.WarningType];
                }
                catch
                {
                    Enum.TryParse(displayConf.WarningType, out temp.WarningType);
                }
                try
                {
                    temp.LapStyle = dicts.LapDisplayStyles[displayConf.LapStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LapStyle, out temp.LapStyle);
                }
                try
                {
                    temp.PitLimiterStyle = dicts.PitFlashStyles[displayConf.LEDsConfigurations.PitLimiterStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterStyle, out temp.PitLimiterStyle);
                }
                try
                {
                    temp.PitLimiterSpeed = dicts.PitFlashSpeeds[displayConf.LEDsConfigurations.PitLimiterSpeed];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.PitLimiterSpeed, out temp.PitLimiterSpeed);
                }
                try
                {
                    temp.ShiftLightStyle = dicts.ShiftStyles[displayConf.LEDsConfigurations.ShiftLightStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.ShiftLightStyle, out temp.ShiftLightStyle);
                }
                try
                {
                    temp.RevLimiterStyle = dicts.RevFlashStyles[displayConf.LEDsConfigurations.RevLimiterStyle];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.RevLimiterStyle, out temp.RevLimiterStyle);
                }
                temp.MatchCarShiftStyle = displayConf.LEDsConfigurations.MatchCarShiftLights;
                temp.MatchRedShift      = displayConf.LEDsConfigurations.MatchRedShift;
                try
                {
                    temp.MatchCarShiftStyleOption =
                        dicts.MatchCarShiftOptions[displayConf.LEDsConfigurations.MatchCarShiftOptions];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.MatchCarShiftOptions, out temp.MatchCarShiftStyleOption);
                }
                temp.DeltaLightsShow = displayConf.LEDsConfigurations.DeltaLightsShow;
                try
                {
                    temp.DeltaLightsPosition =
                        dicts.DeltaLightsPositionOptions[displayConf.LEDsConfigurations.DeltaLightsPosition];
                }
                catch
                {
                    Enum.TryParse(displayConf.LEDsConfigurations.DeltaLightsPosition, out temp.DeltaLightsPosition);
                }
                for (int y = 0; y < Constants.NumberButtonsOnTm1638; y++)
                {
                    var butFuncTemp = ButtonFunctionsEnum.None;

                    foreach (var butFunc in dicts.ButtonFunctions)
                    {
                        if (butFunc.Value.Name == displayConf.ButtonConfigurations.ButtonFunctions[y])
                        {
                            butFuncTemp = butFunc.Key;
                        }
                    }
                    temp.ButtonFunctions[y]      = butFuncTemp;
                    temp.ButtonOptions[y]        = displayConf.ButtonConfigurations.ButtonOptions[y];
                    temp.ButtonOptionsScreens[y] = displayConf.ButtonConfigurations.ButtonOptionsScreens[y];
                }
                returnConf.DisplayConfigurations.Add(temp);
            }
            return(returnConf);
        }
Example #4
0
        public static bool LoadConfigurationFromFile(string fileLocation, out Configuration loaded)
        {
            var newConf = new Configuration { FileLocation = fileLocation };
            bool fileReadOk = true;
            int currentDisplayUnit = 0;
            int currentController = 0;
            int currentButton = 0;
            int currentScreen = 0;
            try
            {
                using (var sr = new StreamReader(fileLocation))
                {
                    bool fileEnded = false;
                    while (sr.EndOfStream == false && !fileEnded)
                    {
                        string line = sr.ReadLine();
                        // ReSharper disable StringIndexOfIsCultureSpecific.1
                        if (line == null) continue;
                        int commaLoc = line.IndexOf(",");
                        // ReSharper restore StringIndexOfIsCultureSpecific.1
                        if (commaLoc <= 0) continue;
                        string parameter = line.Substring(0, commaLoc);
                        string value = line.Substring(commaLoc + 1);

                        ButtonFunctionsEnum temp;
                        switch (parameter)
                        {
                            //ButtonOptionsScreens
                            case "ConfName":
                                newConf.Name = value;
                                break;
                            case "ComPort":
                                int.TryParse(value, out newConf.SerialPortSettings.PreferredComPort);
                                break;
                            case "SerialSpeed":
                                int.TryParse(value, out newConf.SerialPortSettings.SerialPortSpeed);
                                break;
                            case "LogArduinoMessages":
                                Boolean.TryParse(value, out newConf.AdvancedSettings.LogArduinoMessages);
                                break;
                            case "UseCustomSerialSpeed":
                                Boolean.TryParse(value, out newConf.SerialPortSettings.UseCustomSerialSpeed);
                                break;
                            case "DisplayRefreshRate":
                                int.TryParse(value, out newConf.RefreshRates.DisplayRefreshRate);
                                break;
                            case "LEDRefreshRate":
                                int.TryParse(value, out newConf.RefreshRates.LEDRefreshRate);
                                break;
                            case "UseCustomFuelCalculations":
                                Boolean.TryParse(value, out newConf.OtherSettings.UseCustomFuelCalculationOptions);
                                break;
                            case "UseWeightedFuelCalculation":
                                Boolean.TryParse(value, out newConf.OtherSettings.UseWeightedFuelCalculations);
                                break;
                            case "CustomFuelLaps":
                                int.TryParse(value, out newConf.OtherSettings.FuelCalculationLaps);
                                break;
                            case "ButtonFunction1":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[0] = temp;
                                }
                                break;
                            case "ButtonFunction2":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[1] = temp;
                                }
                                break;
                            case "ButtonFunction3":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[2] = temp;
                                }
                                break;
                            case "ButtonFunction4":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[3] = temp;
                                }
                                break;
                            case "ButtonFunction5":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[4] = temp;
                                }
                                break;
                            case "ButtonFunction6":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[5] = temp;
                                }
                                break;
                            case "ButtonFunction7":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[6] = temp;
                                }
                                break;
                            case "ButtonFunction8":
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.DisplayConfigurations[currentDisplayUnit].ButtonFunctions[7] = temp;
                                }
                                break;
                            case "ButtonOption1":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[0] = value;
                                break;
                            case "ButtonOption2":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[1] = value;
                                break;
                            case "ButtonOption3":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[2] = value;
                                break;
                            case "ButtonOption4":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[3] = value;
                                break;
                            case "ButtonOption5":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[4] = value;
                                break;
                            case "ButtonOption6":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[5] = value;
                                break;
                            case "ButtonOption7":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[6] = value;
                                break;
                            case "ButtonOption8":
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptions[7] = value;
                                break; ///////
                            case "ButtonOptionScreens1":
                                int buttonOptionScreenInt1;
                                int.TryParse(value, out buttonOptionScreenInt1);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[0] =
                                    buttonOptionScreenInt1;
                                break;
                            case "ButtonOptionScreens2":
                                int buttonOptionScreenInt2;
                                int.TryParse(value, out buttonOptionScreenInt2);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[1] =
                                    buttonOptionScreenInt2;
                                break;
                            case "ButtonOptionScreens3":
                                int buttonOptionScreenInt3;
                                int.TryParse(value, out buttonOptionScreenInt3);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[2] =
                                    buttonOptionScreenInt3;
                                break;
                            case "ButtonOptionScreens4":
                                int buttonOptionScreenInt4;
                                int.TryParse(value, out buttonOptionScreenInt4);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[3] =
                                    buttonOptionScreenInt4;
                                break;
                            case "ButtonOptionScreens5":
                                int buttonOptionScreenInt5;
                                int.TryParse(value, out buttonOptionScreenInt5);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[4] =
                                    buttonOptionScreenInt5;
                                break;
                            case "ButtonOptionScreens6":
                                int buttonOptionScreenInt6;
                                int.TryParse(value, out buttonOptionScreenInt6);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[5] =
                                    buttonOptionScreenInt6;
                                break;
                            case "ButtonOptionScreens7":
                                int buttonOptionScreenInt7;
                                int.TryParse(value, out buttonOptionScreenInt7);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[6] =
                                    buttonOptionScreenInt7;
                                break;
                            case "ButtonOptionScreens8":
                                int buttonOptionScreenInt8;
                                int.TryParse(value, out buttonOptionScreenInt8);
                                newConf.DisplayConfigurations[currentDisplayUnit].ButtonOptionsScreens[7] =
                                    buttonOptionScreenInt8;
                                break;
                            case "FFBClipLights":
                                Boolean.TryParse(value,
                                                 out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingLights);
                                break;
                            case "FFBClipScreen":
                                Int32.TryParse(value,
                                               out newConf.DisplayConfigurations[currentDisplayUnit].FFBClippingScreen);
                                break;
                            case "HeaderDisplayTime":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.HeaderDisplayTime);
                                break;
                            case "LapDisplayTime":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.LapDisplayTime);
                                break;
                            case "ShowEngineWarnings":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowEngineWarnings);
                                break;
                            case "WarningType":
                                Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].WarningType);
                                break;
                            case "LapStyle":
                                Enum.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].LapStyle);
                                break;
                            case "PitLights":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].PitLights);
                                break;
                            case "ShiftClumps":
                                Boolean.TryParse(value,
                                                 out newConf.DisplayConfigurations[currentDisplayUnit].ShiftClumps);
                                break;
                            case "PitLimiterSpeed":
                                Enum.TryParse(value,
                                              out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterSpeed);
                                break;
                            case "PitLimiterStyle":
                                Enum.TryParse(value,
                                              out newConf.DisplayConfigurations[currentDisplayUnit].PitLimiterStyle);
                                break;
                            case "QuickInfoDisplayTime":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.QuickInfoDisplayTime);
                                break;
                            case "RevLimiterLights":
                                Boolean.TryParse(value,
                                                 out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterLights);
                                break;
                            case "RevLimiterStyle":
                                Enum.TryParse(value,
                                              out newConf.DisplayConfigurations[currentDisplayUnit].RevLimiterStyle);
                                break;
                            case "ShiftLightStyle":
                                Enum.TryParse(value,
                                              out newConf.DisplayConfigurations[currentDisplayUnit].ShiftLightStyle);
                                break;
                            case "MatchCarShiftStyle":
                                Boolean.TryParse(
                                    value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyle);
                                break;
                            case "MatchCarShiftConfiguration":
                                Enum.TryParse(
                                    value,
                                    out newConf.DisplayConfigurations[currentDisplayUnit].MatchCarShiftStyleOption);
                                break;
                            case "MatchRedShift":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].MatchRedShift);
                                break;
                            case "ShowHeaders":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.ShowHeaders);
                                break;

                            case "ColourDeltaByDD":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.ColourDeltaByDD);
                                break;
                            case "DeltaLightsOnDefault":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.DeltaLightsOnDefault);
                                break;
                            case "DeltamessageScreen":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaMessageScreen);
                                break;
                            case "DeltaRange":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.DeltaRange);
                                break;

                            case "ShowLap":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowLap);
                                break;
                            case "Inverted":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].Inverted);
                                break;
                            case "TM1640":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].IsTM1640);
                                break;
                            case "DeltaLightsPosition":
                                Enum.TryParse(
                                    value,
                                    out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsPosition);
                                break;
                            case "DeltaLightsShow":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].DeltaLightsShow);
                                break;

                            case "SwitchLEDs":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].SwitchLEDs);
                                break;
                            case "ShowDC":
                                Boolean.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].ShowDC);
                                break;
                            case "DCDisplayTime":
                                Int32.TryParse(value,
                                               out newConf.DisplayConfigurations[currentDisplayUnit].DCDisplayTime);
                                break;
                            case "ShowShiftLights":
                                Boolean.TryParse(value,
                                                 out newConf.DisplayConfigurations[currentDisplayUnit].ShowShiftLights);
                                break;
                            case "NumScreens":
                                Int32.TryParse(value, out newConf.DisplayConfigurations[currentDisplayUnit].NumScreens);
                                break;
                            case "Intensity":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.Intensity);
                                break;
                            case "ShiftIntensity":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensity);
                                break;
                            case "ShiftIntensityType":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityType);
                                break;
                            case "WarningTextDisplayTime":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.WarningTextDisplayTime);
                                break;
                            case "QuickInfoLightsColour":
                                Boolean.TryParse(value, out newConf.TMDisplaySettings.QuickInfoLightsColour);
                                break;
                            case "ShiftIntensityAmount":
                                Int32.TryParse(value, out newConf.TMDisplaySettings.ShiftIntensityAmount);
                                break;
                            case "ScreenNumber":
                                Int32.TryParse(value, out currentScreen);
                                if (newConf.DisplayConfigurations[currentDisplayUnit].Screens.Count <= currentScreen)
                                {
                                    var tempScreen = new Screen();
                                    tempScreen.Variables.Clear();
                                    newConf.DisplayConfigurations[currentDisplayUnit].Screens.Add(tempScreen);
                                }
                                break;
                            case "DisplayUnit":
                                Int32.TryParse(value, out currentDisplayUnit);
                                if (newConf.DisplayConfigurations.Count <= currentDisplayUnit)
                                {
                                    var unitTemp = new DisplayConfiguration(true);
                                    unitTemp.Screens.Clear();
                                    newConf.DisplayConfigurations.Add(unitTemp);
                                }
                                currentScreen = 0;
                                break;
                            case "UseCustomHeader":
                                bool tempUch;
                                Boolean.TryParse(value, out tempUch);
                                newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].UseCustomHeader = tempUch;
                                break;
                            case "CustomHeader":
                                newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].CustomHeader = value;
                                break;
                            case "Variable":
                                newConf.DisplayConfigurations[currentDisplayUnit].Screens[currentScreen].Variables.Add(
                                    value);
                                break;
                            case "ControllerNumber":
                                currentButton = -1;
                                Int32.TryParse(value, out currentController);
                                if (newConf.ControllerConfigurations.Count <= currentController)
                                {
                                    var controllerTemp = new ControllerConfiguration();
                                    newConf.ControllerConfigurations.Add(controllerTemp);
                                }
                                break;
                            case "DeviceGuid":
                                Guid.TryParse(value, out newConf.ControllerConfigurations[currentController].DeviceGuid);
                                break;
                            case "ConButtonFunction":
                                currentButton++;
                                if (Enum.TryParse(value, out temp))
                                {
                                    newConf.ControllerConfigurations[currentController].ButtonFunctions[currentButton] =
                                        temp;
                                }
                                break;
                            case "ConButtonOption":
                                newConf.ControllerConfigurations[currentController].ButtonOptions[currentButton] = value;
                                break;
                            case "ConButtonOptionScreens":
                                int conButtonOptionScreenInt1;
                                int.TryParse(value, out conButtonOptionScreenInt1);
                                newConf.ControllerConfigurations[currentController].ButtonOptionsScreens[currentButton]
                                    =
                                    conButtonOptionScreenInt1;
                                break;
                            case "ConButtonNumber":
                                int conButtonNumberInt1;
                                int.TryParse(value, out conButtonNumberInt1);
                                newConf.ControllerConfigurations[currentController].ButtonNumbers[currentButton] =
                                    conButtonNumberInt1;
                                break;
                            case "ContSelected":
                                Boolean.TryParse(value, out newConf.ControllerConfigurations[currentController].Selected);
                                break;

                            case "END":
                                fileEnded = true;
                                break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(String.Format("The file could not be read: {0}", e.Message), "File Read Error");
                fileReadOk = false;
            }
            loaded = fileReadOk ? newConf : null;
            return fileReadOk;
        }