public UserSettings(string InFileName, TextWriter Log) { FileName = InFileName; ConfigFile.TryLoad(FileName, Log); // General settings Version = (UserSettingsVersion)ConfigFile.GetValue("General.Version", (int)UserSettingsVersion.Initial); bBuildAfterSync = (ConfigFile.GetValue("General.BuildAfterSync", "1") != "0"); bRunAfterSync = (ConfigFile.GetValue("General.RunAfterSync", "1") != "0"); bool bSyncPrecompiledEditor = (ConfigFile.GetValue("General.SyncPrecompiledEditor", "0") != "0"); bOpenSolutionAfterSync = (ConfigFile.GetValue("General.OpenSolutionAfterSync", "0") != "0"); bShowLogWindow = (ConfigFile.GetValue("General.ShowLogWindow", false)); bAutoResolveConflicts = (ConfigFile.GetValue("General.AutoResolveConflicts", "1") != "0"); bShowUnreviewedChanges = ConfigFile.GetValue("General.ShowUnreviewed", true); bShowAutomatedChanges = ConfigFile.GetValue("General.ShowAutomated", false); bShowLocalTimes = ConfigFile.GetValue("General.ShowLocalTimes", false); bKeepInTray = ConfigFile.GetValue("General.KeepInTray", true); int.TryParse(ConfigFile.GetValue("General.FilterIndex", "0"), out FilterIndex); string LastProjectString = ConfigFile.GetValue("General.LastProject", null); if (LastProjectString != null) { UserSelectedProjectSettings.TryParseConfigEntry(LastProjectString, out LastProject); } else { string LastProjectFileName = ConfigFile.GetValue("General.LastProjectFileName", null); if (LastProjectFileName != null) { LastProject = new UserSelectedProjectSettings(null, null, UserSelectedProjectType.Local, null, LastProjectFileName); } } OpenProjects = ReadProjectList("General.OpenProjects", "General.OpenProjectFileNames"); RecentProjects = ReadProjectList("General.RecentProjects", "General.OtherProjectFileNames"); SyncView = ConfigFile.GetValues("General.SyncFilter", new string[0]); SyncCategories = GetCategorySettings(ConfigFile.FindSection("General"), "SyncIncludedCategories", "SyncExcludedCategories"); bSyncAllProjects = ConfigFile.GetValue("General.SyncAllProjects", false); bIncludeAllProjectsInSolution = ConfigFile.GetValue("General.IncludeAllProjectsInSolution", false); if (!Enum.TryParse(ConfigFile.GetValue("General.SyncType", ""), out SyncType)) { SyncType = LatestChangeType.Good; } // Build configuration string CompiledEditorBuildConfigName = ConfigFile.GetValue("General.BuildConfig", ""); if (!Enum.TryParse(CompiledEditorBuildConfigName, true, out CompiledEditorBuildConfig)) { CompiledEditorBuildConfig = BuildConfig.DebugGame; } // Tab names string TabLabelsValue = ConfigFile.GetValue("General.TabLabels", ""); if (!Enum.TryParse(TabLabelsValue, true, out TabLabels)) { TabLabels = TabLabels.Stream; } // Editor arguments string[] Arguments = ConfigFile.GetValues("General.EditorArguments", new string[] { "0:-log", "0:-fastload" }); if (Version < UserSettingsVersion.XgeShaderCompilation) { Arguments = Enumerable.Concat(Arguments, new string[] { "0:-noxgeshadercompile" }).ToArray(); } foreach (string Argument in Arguments) { if (Argument.StartsWith("0:")) { EditorArguments.Add(new Tuple <string, bool>(Argument.Substring(2), false)); } else if (Argument.StartsWith("1:")) { EditorArguments.Add(new Tuple <string, bool>(Argument.Substring(2), true)); } else { EditorArguments.Add(new Tuple <string, bool>(Argument, true)); } } bEditorArgumentsPrompt = ConfigFile.GetValue("General.EditorArgumentsPrompt", false); // Precompiled binaries string[] ArchiveValues = ConfigFile.GetValues("PrecompiledBinaries.Archives", new string[0]); foreach (string ArchiveValue in ArchiveValues) { ArchiveSettings Settings; if (ArchiveSettings.TryParseConfigEntry(ArchiveValue, out Settings)) { Archives.Add(Settings); } } if (bSyncPrecompiledEditor) { Archives.Add(new ArchiveSettings(true, "Editor", new string[0])); } // Window settings bWindowVisible = ConfigFile.GetValue("Window.Visible", true); if (!Enum.TryParse(ConfigFile.GetValue("Window.State", ""), true, out WindowState)) { WindowState = FormWindowState.Normal; } WindowBounds = ParseRectangleValue(ConfigFile.GetValue("Window.Bounds", "")); // Schedule settings bScheduleEnabled = ConfigFile.GetValue("Schedule.Enabled", false); if (!TimeSpan.TryParse(ConfigFile.GetValue("Schedule.Time", ""), out ScheduleTime)) { ScheduleTime = new TimeSpan(6, 0, 0); } if (!Enum.TryParse(ConfigFile.GetValue("Schedule.Change", ""), out ScheduleChange)) { ScheduleChange = LatestChangeType.Good; } ScheduleAnyOpenProject = ConfigFile.GetValue("Schedule.AnyOpenProject", true); ScheduleProjects = ReadProjectList("Schedule.Projects", "Schedule.ProjectFileNames"); // Notification settings NotifyProjects = ConfigFile.GetValues("Notifications.NotifyProjects", new string[0]).ToList(); NotifyUnassignedMinutes = ConfigFile.GetValue("Notifications.NotifyUnassignedMinutes", -1); NotifyUnacknowledgedMinutes = ConfigFile.GetValue("Notifications.NotifyUnacknowledgedMinutes", -1); NotifyUnresolvedMinutes = ConfigFile.GetValue("Notifications.NotifyUnresolvedMinutes", -1); // Perforce settings if (!int.TryParse(ConfigFile.GetValue("Perforce.NumRetries", "0"), out SyncOptions.NumRetries)) { SyncOptions.NumRetries = 0; } int NumThreads; if (int.TryParse(ConfigFile.GetValue("Perforce.NumThreads", "0"), out NumThreads) && NumThreads > 0) { if (Version >= UserSettingsVersion.DefaultNumberOfThreads || NumThreads > 1) { SyncOptions.NumThreads = NumThreads; } } if (!int.TryParse(ConfigFile.GetValue("Perforce.TcpBufferSize", "0"), out SyncOptions.TcpBufferSize)) { SyncOptions.TcpBufferSize = 0; } }