示例#1
0
        /// <summary>
        /// Create a live settings store attached to a settings file.
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static SettingsStore <T> Create(string path)
        {
            var document = new XmlDocument();

            var directory = Path.GetDirectoryName(path);
            var file      = Path.GetFileName(path);
            var watcher   = new FileSystemWatcher(directory, file);

            try
            {
                var xml = File.ReadAllText(path, _xmlEncoding);
                document.LoadXml(xml);
            }
            catch
            {
                // Errors can be ignored.
                document = new XmlDocument();
                document.LoadXml("<" + typeof(T).Name + "/>");
            }

            T settings;

            try
            {
                settings = SettingsSerializer.FromXmlDocument <T>(document);
            }
            catch
            {
                settings = SettingsSerializer.CreateDefault <T>();
            }

            var store = new SettingsStore <T>(document, settings, path, watcher);

            return(store);
        }
示例#2
0
        /// <summary>
        /// Create store from an xml string.
        /// </summary>
        /// <param name="xmlString">The XML.</param>
        /// <returns>The object managing the settings.</returns>
        public static SettingsStore <T> CreateFromXml(string xmlString)
        {
            var document = new XmlDocument();

            document.LoadXml(xmlString);

            var settings = SettingsSerializer.FromXmlDocument <T>(document);
            var store    = new SettingsStore <T>(document, settings);

            return(store);
        }
示例#3
0
        void OnFileChanged(object sender, FileSystemEventArgs e)
        {
            XmlDocument document;

            try
            {
                var newContent = File.ReadAllText(_path);
                document = new XmlDocument();
                document.LoadXml(newContent);
            }
            catch
            {
                document = null;
            }

            if (document != null)
            {
                SettingsSerializer.MergeXmlDocument(document, _settings);
                _document = document;

                Changed?.Invoke(this, EventArgs.Empty);
            }
        }
        internal void SetPropertyValue(string name, object value)
        {
            var property = GetProperty(name);

            SettingsSerializer.SetProperty(property, Settings, value);
        }
示例#5
0
        /// <summary>
        /// Reset content to default.
        /// </summary>
        public void Reset()
        {
            SettingsSerializer.ResetDefault(_settings);

            Changed?.Invoke(this, EventArgs.Empty);
        }
示例#6
0
        public override void Serialize(string name, ValueNudgerFactory factory)
        {
            var property  = GetProperty(name);
            var attribute = _element.Attributes[name]?.Value;

            if (attribute == null)
            {
                var elements = _element.GetElementsByTagName(name);
                if (elements.Count != 0)
                {
                    attribute = elements[0].InnerText;

                    while (elements.Count != 0)
                    {
                        _element.RemoveChild(elements[0]);
                    }
                }
            }

            if (attribute != null)
            {
                object value;

                try
                {
                    var propertyType = property.PropertyType;
                    if (propertyType.IsAssignableFrom(typeof(string)))
                    {
                        value = attribute;
                    }
                    else if (propertyType.IsAssignableFrom(typeof(int)))
                    {
                        value = int.Parse(attribute);
                    }
                    else if (propertyType.IsAssignableFrom(typeof(double)))
                    {
                        value = double.Parse(attribute);
                    }
                    else if (propertyType.IsAssignableFrom(typeof(float)))
                    {
                        value = float.Parse(attribute);
                    }
                    else if (propertyType.IsAssignableFrom(typeof(bool)))
                    {
                        value = bool.Parse(attribute);
                    }
                    else if (propertyType.IsEnum)
                    {
                        value = Enum.Parse(propertyType, attribute);
                    }
                    else
                    {
                        value = new NotImplementedException("Property type not implemented");
                    }
                }
                catch
                {
                    // Value didn't parse, stick with default value.
                    value = null;
                }

                if (value != null)
                {
                    SettingsSerializer.SetProperty(property, Settings, value);
                }
            }
        }