public void ReadValues(Data data, string path)
        {
            Accounts.ReadValues(data, path + @"Accounts\");

            try
            {
                int numClasses = int.Parse(data.GetValue(@"" + path + @"PrinterMappings\numClasses"));
                for (int i = 0; i < numClasses; i++)
                {
                    PrinterMapping tmp = new PrinterMapping();
                    tmp.ReadValues(data, @"" + path + @"PrinterMappings\" + i + @"\");
                    PrinterMappings.Add(tmp);
                }
            } catch {}


            try
            {
                int numClasses = int.Parse(data.GetValue(@"" + path + @"TitleReplacement\numClasses"));
                for (int i = 0; i < numClasses; i++)
                {
                    TitleReplacement tmp = new TitleReplacement();
                    tmp.ReadValues(data, @"" + path + @"TitleReplacement\" + i + @"\");
                    TitleReplacement.Add(tmp);
                }
            } catch {}

            try { AskSwitchDefaultPrinter = bool.Parse(data.GetValue(@"" + path + @"AskSwitchDefaultPrinter")); } catch { AskSwitchDefaultPrinter = true; }
            try { Language = Data.UnescapeString(data.GetValue(@"" + path + @"Language")); } catch { Language = ""; }
            try { LastUsedProfileGuid = Data.UnescapeString(data.GetValue(@"" + path + @"LastUsedProfileGuid")); } catch { LastUsedProfileGuid = "DefaultGuid"; }
            try { LoggingLevel = (LoggingLevel)Enum.Parse(typeof(LoggingLevel), data.GetValue(@"" + path + @"LoggingLevel")); } catch { LoggingLevel = LoggingLevel.Error; }
            try { PrimaryPrinter = Data.UnescapeString(data.GetValue(@"" + path + @"PrimaryPrinter")); } catch { PrimaryPrinter = "PDFCreator"; }
            try { UpdateInterval = (UpdateInterval)Enum.Parse(typeof(UpdateInterval), data.GetValue(@"" + path + @"UpdateInterval")); } catch { UpdateInterval = UpdateInterval.Weekly; }
        }
        public void ReadValues(Data data, string path = "")
        {
            Accounts.ReadValues(data, path + @"Accounts\");
            JobHistory.ReadValues(data, path + @"JobHistory\");

            try
            {
                int numClasses = int.Parse(data.GetValue(@"" + path + @"PrinterMappings\numClasses"));
                for (int i = 0; i < numClasses; i++)
                {
                    PrinterMapping tmp = new PrinterMapping();
                    tmp.ReadValues(data, @"" + path + @"PrinterMappings\" + i + @"\");
                    PrinterMappings.Add(tmp);
                }
            } catch {}

            RssFeed.ReadValues(data, path + @"RssFeed\");

            try
            {
                int numClasses = int.Parse(data.GetValue(@"" + path + @"TitleReplacement\numClasses"));
                for (int i = 0; i < numClasses; i++)
                {
                    TitleReplacement tmp = new TitleReplacement();
                    tmp.ReadValues(data, @"" + path + @"TitleReplacement\" + i + @"\");
                    TitleReplacement.Add(tmp);
                }
            } catch {}

            UsageStatistics.ReadValues(data, path + @"UsageStatistics\");
            ConversionTimeout = int.TryParse(data.GetValue(@"" + path + @"ConversionTimeout"), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out var tmpConversionTimeout) ? tmpConversionTimeout : 60;
            EnableTips        = bool.TryParse(data.GetValue(@"" + path + @"EnableTips"), out var tmpEnableTips) ? tmpEnableTips : true;
            try { Language = Data.UnescapeString(data.GetValue(@"" + path + @"Language")); } catch { Language = ""; }
            LicenseExpirationReminder = DateTime.TryParse(data.GetValue(@"" + path + @"LicenseExpirationReminder"), System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out var tmpLicenseExpirationReminder) ? tmpLicenseExpirationReminder : DateTime.Now;
            LoggingLevel      = Enum.TryParse <LoggingLevel>(data.GetValue(@"" + path + @"LoggingLevel"), out var tmpLoggingLevel) ? tmpLoggingLevel : LoggingLevel.Error;
            NextUpdate        = DateTime.TryParse(data.GetValue(@"" + path + @"NextUpdate"), System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out var tmpNextUpdate) ? tmpNextUpdate : DateTime.Now;
            UnitOfMeasurement = Enum.TryParse <UnitOfMeasurement>(data.GetValue(@"" + path + @"UnitOfMeasurement"), out var tmpUnitOfMeasurement) ? tmpUnitOfMeasurement : UnitOfMeasurement.Centimeter;
            UpdateInterval    = Enum.TryParse <UpdateInterval>(data.GetValue(@"" + path + @"UpdateInterval"), out var tmpUpdateInterval) ? tmpUpdateInterval : UpdateInterval.Weekly;
        }