using System; using System.IO; using System.Text; using System.Xml.Serialization; namespace DeviceTest { /// /// Class to be serialized to an XML file... /// [XmlRootAttribute("DeviceTest")] public class LocalSettings { public string ParentClassName; public string ParentName; public string ParentSettings; public string ComponentClassName; public string ComponentName; public string ParentComponentName; public string ComponentSettings; public LocalSettings() { } /// /// Load public fields of this class from the XML file. /// /// LocalSettings object or null when Load() fails public static LocalSettings Load(string fileName) { try { using (TextReader reader = new StreamReader(fileName)) { LocalSettings ls = (new XmlSerializer(typeof(LocalSettings))).Deserialize(reader) as LocalSettings; // Copy the settings just in case De-serialize() completes OK return ls; } } catch (Exception e) { string msg = e.Message; return null; } } /// /// Save public fields of this class to the XML file. /// public void Save() { try { using (TextWriter writer = new StreamWriter(Program.LocalSettingsFileName)) { (new XmlSerializer(typeof(LocalSettings))).Serialize(writer, this); } } catch (Exception e) { string msg = e.Message; } } /// /// Updates history stored in a string array by a new latest string. /// /// Last entered string /// true = updated and saved public bool UpdateHistory(string lastStrValue, ref string[] history) { const int MaxHistoryLen = 10; if (string.IsNullOrEmpty(lastStrValue)) return false; int currentHistoryLength = (history != null) ? history.Length : 0; int match = -1; for (int i = 0; i < currentHistoryLength; i++) { if (history[i] == lastStrValue) { match = i; break; } } if (match >= 0 || currentHistoryLength >= MaxHistoryLen) { /// History does not have to be extended (because of a match) or should not be extended (because of the lenght) if (match < 0) match = currentHistoryLength - 1; for (int j = match; j > 0; j--) { history[j] = history[j - 1]; } history[0] = lastStrValue; } else { /// History will be extended, new item inserted at the beginning string[] newHistory = new string[currentHistoryLength + 1]; newHistory[0] = lastStrValue; for (int j = 1; j <= currentHistoryLength; j++) { newHistory[j] = history[j - 1]; } history = newHistory; } Save(); return true; } } }