Files @ 62bce5871a4e
Branch filter:

Location: ATITD-Tools/Desert-Paint-Lab/Settings.cs - annotation

jmaltzen
Added tag VERSION_T8_RC5 for changeset 5db137e7ce90
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace DesertPaintLab
{
    public class Settings
    {
        public Settings()
        {
        }

        private Dictionary<string, string> _settings = new Dictionary<string, string>();

        public void Get(string key, out int value)
        {
            value = 0;
            string valStr;
            if ( _settings.TryGetValue(key.ToLower(), out valStr) )
            {
                Int32.TryParse(valStr, out value);
            }
        }
        public void Get(string key, out bool value)
        {
            value = false;
            string valStr;
            if ( _settings.TryGetValue(key.ToLower(), out valStr) )
            {
                Boolean.TryParse(valStr, out value);
            }
        }
        public void Set(string key, int value)
        {
            _settings[key.ToLower()] = value.ToString();
        }
        public void Set(string key, bool value)
        {
            _settings[key.ToLower()] = value.ToString();
        }

        public void Reset()
        {
            _settings.Clear();
        }

        public void Save(string settingsPath)
        {
            using (StreamWriter writer = new StreamWriter(settingsPath))
            {
                foreach (KeyValuePair<string, string> pair in _settings)
                {
                    writer.WriteLine("{0}={1}", pair.Key, pair.Value);
                }
            }
        }
        
        static Regex optionEntry = new Regex(@"(?<opt>[^#=][^=]*)=(?<optval>.*)$");
        public bool Load(string settingsPath)
        {
            if (System.IO.File.Exists(settingsPath))
            {
                string line;
                Match match;
                using (StreamReader reader = new StreamReader(settingsPath))
                {
                    while ((line = reader.ReadLine()) != null) 
                    {
                        match = optionEntry.Match(line);
                        if (match.Success)
                        {
                            String optName = match.Groups["opt"].Value.ToLower();
                            String optVal = match.Groups["optval"].Value.Trim();
                            if (optName.Equals("debug"))
                            {
                                // convert
                                optName = "enabledebugmenu";
                            }
                            _settings[optName.ToLower()] = optVal;
                        }
                    }
                }
                return true;
            }
            return false;
        }
    }
}