/// /// Copyright (c) 2017 Sensus Metering Systems /// using System; using System.IO; using System.Text; using System.Xml.Serialization; namespace UserManagement { /// /// Class to be serialized to an XML file... /// Public members are local settings. /// These settings are modified by dialogs invoked by menu items /// Edit->Preferences ... PreferencesDlg ... S1.1(language, etc. local settings), and /// Edit->Advanced settings ... AdvancedSettingsDlg ... S1.2(spec. where bench settings are stored) /// [XmlRootAttribute("UserManagement")] public class LocalSettings { /// /// User interface language (used as CultureInfo(..) constructor argument). /// public string Language = "en"; public string ConnectionString = "SERVER=10.42.128.16; DATABASE=zamestnanci; UID=v856e04; PASSWORD=p054236478; CHARSET=utf8;"; /// /// Login method: UserName, FullName or Number /// public Users.Entities.LoginMethod LoginMethod; /// MainWnd public int MainWndLeft; public int MainWndTop; public int MainWndWidth; public int MainWndHeight; public bool ManiWndMaximized; 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. /// /// Lste entered string /// true = updated and saved public bool UpdateHistory(string lastStrValue, ref string[] history, int maxHistoryLen = 10) { if (string.IsNullOrEmpty(lastStrValue)) return false; int currentHistoryCount = (history != null) ? history.Length : 0; int match = -1; for (int i = 0; i < currentHistoryCount; i++) { if (history[i] == lastStrValue) { match = i; break; } } if (match >= 0 || currentHistoryCount >= maxHistoryLen) { /// History does not have to be (because of a match) or should not be extended (because of the lenght) if (match < 0) match = currentHistoryCount - 1; for (int j = match; j > 0; j--) { history[j] = history[j - 1]; } history[0] = lastStrValue; } else { /// History wiil be extended, new item inserted at the beginning string[] newHistory = new string[currentHistoryCount + 1]; newHistory[0] = lastStrValue; for (int j = 1; j <= currentHistoryCount; j++) { newHistory[j] = history[j - 1]; } history = newHistory; } Save(); return true; } } }