//fill with defaults public DisplayConfiguration(bool t) { ButtonFunctions = new List<ButtonFunctionsEnum> { ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None, ButtonFunctionsEnum.None }; ButtonOptions = new List<string> {"", "", "", "", "", "", "", ""}; ButtonOptionsScreens = new List<int> {-1, -1, -1, -1, -1, -1, -1, -1}; //LapDisplayTime = 2; LapStyle = LapDisplayStylesEnum.LapTimeDeltaPersonal; NumScreens = 1; PitLights = false; PitLimiterSpeed = PitFlashSpeedsEnum.Full; PitLimiterStyle = PitFlashStyleEnum.GreenRedAlternateFlash; RevLimiterLights = false; RevLimiterStyle = RevFlashStyleEnum.StayRed; ShiftLightStyle = ShiftStyleEnum.GreenRedProgressiveRedShift; ShowLap = false; ShowShiftLights = false; FFBClippingLights = false; FFBClippingScreen = -1; if (t) { var temp = new Screen { Example = "148 3 43", Variables = new List<string> {"Speed", "Space", "Gear", "Space", "Laps2"} }; Screens = new List<Screen> {temp}; } }
// ReSharper restore UnusedParameter.Local // ReSharper disable UnusedParameter.Local public DisplayUnitConfiguration(bool t) { ButtonConfigurations = new ButtonConfiguration { ButtonFunctions = new List<string> { "None", "None", "None", "None", "None", "None", "None", "None" }, ButtonOptions = new List<string> {"", "", "", "", "", "", "", ""}, ButtonOptionsScreens = new List<int> {-1, -1, -1, -1, -1, -1, -1, -1} }; Inverted = false; IsTM1640 = false; SwitchLEDs = false; ShowDC = false; DCDisplayTime = 0; LapStyle = "Lap Time (12.34) and Personal Delta (-0.12)"; //LapDisplayStylesEnum.LapTimeDeltaPersonal; NumScreens = 0; LEDsConfigurations = new LEDsConfiguration { PitLights = false, PitLimiterSpeed = "Full Speed", PitLimiterStyle = "Green & Red Alternate Switch", RevLimiterLights = false, RevLimiterStyle = "Stay Red", ShiftLightStyle = "Green and Red Progressive with Red Shift", ShiftClumps = false }; ShowLap = false; LEDsConfigurations.ShowShiftLights = false; LEDsConfigurations.FFBClippingLights = false; LEDsConfigurations.FFBClippingScreen = 0; var temp = new Screen { Example = "148 3 43", Variables = new List<string> {"Speed", "Space", "Gear", "Space", "Laps2"} }; Screens = new List<Screen> {temp}; }
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; }