/// /// Copyright (c) 2015 Sensus Metering Systems /// using System; using System.IO; using System.Text; using System.Xml.Serialization; namespace ResultsBrowser { /// /// 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("ResultsBrowser")] public class LocalSettings { /// /// User interface language (used as CultureInfo(..) constructor argument). /// public string Language; /// Names of servers. public string Bench1; public string Bench2; public string Bench3; public string Bench4; public string Bench5; /// Database settings of servers. public string ConnectionString1; public string ConnectionString2; public string ConnectionString3; public string ConnectionString4; public string ConnectionString5; public bool Bench1Selected; public bool Bench2Selected; public bool Bench3Selected; public bool Bench4Selected; public bool Bench5Selected; public string TimePeriodFormat; /// Statistics options public bool TwoDim; public string RowItemCaption; public string RowItemCaption2; public string RowItemCaption3; public string ColumnItemCaption; public string ColumnItemCaption2; public string ColumnItemCaption3; public string RowTestSpecifier; public string RowTestSpecifier2; public string RowTestSpecifier3; public string ColumnTestSpecifier; public string ColumnTestSpecifier2; public string ColumnTestSpecifier3; public bool FilterPurchaseOrder; public bool FilterProcedure; public bool FilterBatchNr; public bool FilterDate; public bool ResolveManually; /// MainWnd public int MainWndLeft; public int MainWndTop; public int MainWndWidth; public int MainWndHeight; public bool ManiWndMaximized; public int SplitterDistance; /// Last configuration file name public string LastConfigFileName; /// Purchase order history public string LastPurchaseOrder; public string[] PurchaseOrderHistory; [XmlIgnore] public int PurchaseOrderHistoryCount { get { return (PurchaseOrderHistory != null) ? PurchaseOrderHistory.Length : 0; } } /// Procedure history public string LastProcedure; public string[] ProcedureHistory; [XmlIgnore] public int ProcedureHistoryCount { get { return (ProcedureHistory != null) ? ProcedureHistory.Length : 0; } } /// BatchNr range public string BatchFrom; public string BatchTo; /// Report file name history public string LastReportFileName; public string[] ReportFileNameHistory; [XmlIgnore] public int ReportFileNameHistoryCount { get { return (ReportFileNameHistory != null) ? ReportFileNameHistory.Length : 0; } } /// Report configuration public string[] ReportItems_Single; public string[] ReportItems_Compound; public LocalSettings() { } /// /// Load public fields of this class from the XML file. /// 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; } } }