#if NET_2_0
using System;
+using System.ComponentModel;
using System.Collections.Specialized;
using System.Xml;
using System.IO;
public sealed class AppSettingsSection : ConfigurationSection
{
- KeyValueConfigurationCollection values;
- const string configFile = "file";
-
private static ConfigurationPropertyCollection _properties;
private static readonly ConfigurationProperty _propFile;
+ private static readonly ConfigurationProperty _propSettings;
static AppSettingsSection ()
{
+ _propFile = new ConfigurationProperty ("file", typeof(string), "",
+ new StringConverter(), null, ConfigurationPropertyOptions.None);
+ _propSettings = new ConfigurationProperty ("", typeof(KeyValueConfigurationCollection), null,
+ null, null, ConfigurationPropertyOptions.IsDefaultCollection);
+
_properties = new ConfigurationPropertyCollection ();
- _propFile = new ConfigurationProperty (configFile,
- typeof(string),
- "",
- ConfigurationPropertyOptions.None);
_properties.Add (_propFile);
+ _properties.Add (_propSettings);
}
public AppSettingsSection ()
return Settings.IsModified ();
}
- [MonoTODO ("Read file attribute")]
+ [MonoInternalNote ("file path? do we use a System.Configuration api for opening it? do we keep it open? do we open it writable?")]
protected internal override void DeserializeElement (XmlReader reader, bool serializeCollectionKey)
{
- Settings.DeserializeElement (reader, serializeCollectionKey);
+ /* need to do this so we pick up the File attribute */
+ base.DeserializeElement (reader, serializeCollectionKey);
+
+ if (File != "") {
+ try {
+ Stream s = System.IO.File.OpenRead (File);
+ XmlReader subreader = new ConfigXmlTextReader (s, File);
+ base.DeserializeElement (subreader, serializeCollectionKey);
+ s.Close ();
+ }
+ catch {
+ // nada, we just ignore a missing/unreadble file
+ }
+ }
}
protected internal override void Reset (ConfigurationElement parentSection)
protected internal override string SerializeSection (
ConfigurationElement parent, string name, ConfigurationSaveMode mode)
{
- throw new NotImplementedException ();
+ if (File == "") {
+ return base.SerializeSection (parent, name, mode);
+ }
+ else {
+ throw new NotImplementedException ();
+ }
}
[ConfigurationProperty ("file", DefaultValue = "")]
public string File {
- get { return (string)base [configFile]; }
- set { base [configFile] = value; }
+ get { return (string)base [_propFile]; }
+ set { base [_propFile] = value; }
}
[ConfigurationProperty ("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
public KeyValueConfigurationCollection Settings {
- get {
- if (values == null)
- values = new KeyValueConfigurationCollection();
- return values;
- }
+ get { return (KeyValueConfigurationCollection) base [_propSettings]; }
}
protected internal override ConfigurationPropertyCollection Properties {
}
}
- [MonoTODO]
protected internal override object GetRuntimeObject ()
{
- return base.GetRuntimeObject();
+ KeyValueInternalCollection col = new KeyValueInternalCollection ();
+
+ foreach (string key in Settings.AllKeys) {
+ KeyValueConfigurationElement ele = Settings[key];
+ col.Add (ele.Key, ele.Value);
+ }
+
+ if (!ConfigurationManager.ConfigurationSystem.SupportsUserConfig)
+ col.SetReadOnly ();
+
+ return col;
}
}
}