//
// Authors:
// Duncan Mak (duncan@ximian.com)
+// Chris Toshok (toshok@ximian.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
#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;
-
+ 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 ();
+
+ _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)
Settings.Reset (psec.Settings);
}
+ [MonoTODO]
protected internal override string SerializeSection (
ConfigurationElement parent, string name, ConfigurationSaveMode mode)
{
- AppSettingsSection psec = parent as AppSettingsSection;
- if (psec != null)
- return Settings.SerializeSection (psec.Settings, name, mode);
- else
- return Settings.SerializeSection (null, name, mode);
+ if (File == "") {
+ return base.SerializeSection (parent, name, mode);
+ }
+ else {
+ throw new NotImplementedException ();
+ }
}
- [MonoTODO]
+ [ConfigurationProperty ("file", DefaultValue = "")]
public string File {
- get { throw new NotImplementedException (); }
- set { throw new NotImplementedException (); }
+ get { return (string)base [_propFile]; }
+ set { base [_propFile] = value; }
}
+ [ConfigurationProperty ("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
public KeyValueConfigurationCollection Settings {
+ get { return (KeyValueConfigurationCollection) base [_propSettings]; }
+ }
+
+ protected internal override ConfigurationPropertyCollection Properties {
get {
- if (values == null)
- values = new KeyValueConfigurationCollection();
- return values;
+ return _properties;
}
}
+
+ protected internal override object 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;
+ }
}
}
#endif