using System; using System.IO; using System.Text; using System.Xml.Serialization; namespace TBF { /// /// 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("TestBenchFramework")] public class LocalSettings { /// /// Available languages. /// Method ToString should give a supported culture info string: /// ("en","de","fr","es","it","cn", etc.). /// public enum Languages { en, de, sk, Count, } /// /// User interface language ("en","de","fr","es","it","cn", etc.). /// public string Language = "en"; /// /// Names and database settings of test benches. /// [XmlArrayAttribute("TestBenches")] public DatabaseSettings[] testBenches; [XmlIgnore] public DatabaseSettings[] TestBenches { get { return testBenches; } } [XmlIgnore] public int BenchesCount { get { return (testBenches != null) ? testBenches.GetLength(0) : 0; } } /// /// Currently selected bench name (local or remote) or null (= no selection done). /// [XmlElementAttribute("LastBench")] public string LastBenchName; /// /// Currently selected procedure name or null (= no selection done yet). /// [XmlElementAttribute("LastProcedure")] public string LastProcedureName; public int CycleNr; public int RightPaneHorizSplitterDistance; /// MainWnd public int MainWndLeft; public int MainWndTop; public int MainWndWidth; public int MainWndHeight; public bool ManiWndMaximized; /// Components public int ComponentsDlgLeft; public int ComponentsDlgTop; public int ComponentsDlgWidth; public int ComponentsDlgHeight; /// Paths public int PathsDlgLeft; public int PathsDlgTop; public int PathsDlgWidth; public int PathsDlgHeight; [XmlArrayAttribute("FeedingColumnWidths")] public int[] FeedingColumnWidths; [XmlIgnore] public int FeedingColumnCount { get { return (FeedingColumnWidths != null) ? FeedingColumnWidths.Length : 0; } } [XmlArrayAttribute("BenchColumnWidths")] public int[] BenchColumnWidths; [XmlIgnore] public int BenchColumnCount { get { return (BenchColumnWidths != null) ? BenchColumnWidths.Length : 0; } } [XmlArrayAttribute("OutputColumnWidths")] public int[] OutputColumnWidths; [XmlIgnore] public int OutputColumnCount { get { return (OutputColumnWidths != null) ? OutputColumnWidths.Length : 0; } } [XmlArrayAttribute("MetersColumnWidths")] public int[] MetersColumnWidths; [XmlIgnore] public int MetersColumnCount { get { return (MetersColumnWidths != null) ? MetersColumnWidths.Length : 0; } } /// Transitions public int TransitionsDlgLeft; public int TransitionsDlgTop; public int TransitionsDlgWidth; public int TransitionsDlgHeight; [XmlArrayAttribute("TransitionsColumnWidths")] public int[] TransitionsColumnWidths; [XmlIgnore] public int TransitionsColumnCount { get { return (TransitionsColumnWidths != null) ? TransitionsColumnWidths.Length : 0; } } /// Metrology public int MetrologyDlgLeft; public int MetrologyDlgTop; public int MetrologyDlgWidth; public int MetrologyDlgHeight; /// Procedures public int ProceduresDlgLeft; public int ProceduresDlgTop; public int ProceduresDlgWidth; public int ProceduresDlgHeight; /// OneProcedure public int OneProcedureDlgLeft; public int OneProcedureDlgTop; public int OneProcedureDlgWidth; public int OneProcedureDlgHeight; /// Configuration of results public Forms.ResultsConfig.Meters ResultsConfigMeters; public Forms.ResultsConfig.TestsAre ResultsConfigTests; public string[] RsltItems_Screen_SingleWM; public string[] RsltItems_Screen_CombinedWM; public string[] RsltItems_Printer_SingleWM; public string[] RsltItems_Printer_CombinedWM; public string[] RsltItems_Disk_SingleWM; public string[] RsltItems_Disk_CombinedWM; [XmlArrayAttribute("RsltsSingleClmnWdths")] public int[] RsltsSingleClmnWdths; [XmlIgnore] public int RsltsSingleClmnCount { get { return (RsltsSingleClmnWdths != null) ? RsltsSingleClmnWdths.Length : 0; } } [XmlArrayAttribute("RsltsCombinedClmnWdths")] public int[] RsltsCombinedClmnWdths; [XmlIgnore] public int RsltsCombinedClmnCount { get { return (RsltsCombinedClmnWdths != null) ? RsltsCombinedClmnWdths.Length : 0; } } /// /// Copy public fields from a LocalSettings object to this object. /// /// Origin public void Assign(LocalSettings ls) { if (ls != null) { Language = ls.Language; testBenches = new DatabaseSettings[ls.BenchesCount]; for (int i = 0; i < BenchesCount; i++) testBenches[i] = ls.testBenches[i]; LastBenchName = ls.LastBenchName; LastProcedureName = ls.LastProcedureName; CycleNr = ls.CycleNr; MainWndLeft = ls.MainWndLeft; MainWndTop = ls.MainWndTop; MainWndWidth = ls.MainWndWidth; MainWndHeight = ls.MainWndHeight; ManiWndMaximized = ls.ManiWndMaximized; RightPaneHorizSplitterDistance = ls.RightPaneHorizSplitterDistance; ComponentsDlgLeft = ls.ComponentsDlgLeft; ComponentsDlgTop = ls.ComponentsDlgTop; ComponentsDlgWidth = ls.ComponentsDlgWidth; ComponentsDlgHeight = ls.ComponentsDlgHeight; PathsDlgLeft = ls.PathsDlgLeft; PathsDlgTop = ls.PathsDlgTop; PathsDlgWidth = ls.PathsDlgWidth; PathsDlgHeight = ls.PathsDlgHeight; FeedingColumnWidths = new int[ls.FeedingColumnCount]; for (int i = 0; i < FeedingColumnCount; i++) FeedingColumnWidths[i] = ls.FeedingColumnWidths[i]; BenchColumnWidths = new int[ls.BenchColumnCount]; for (int i = 0; i < BenchColumnCount; i++) BenchColumnWidths[i] = ls.BenchColumnWidths[i]; OutputColumnWidths = new int[ls.OutputColumnCount]; for (int i = 0; i < OutputColumnCount; i++) OutputColumnWidths[i] = ls.OutputColumnWidths[i]; MetersColumnWidths = new int[ls.MetersColumnCount]; for (int i = 0; i < MetersColumnCount; i++) MetersColumnWidths[i] = ls.MetersColumnWidths[i]; TransitionsDlgLeft = ls.TransitionsDlgLeft; TransitionsDlgTop = ls.TransitionsDlgTop; TransitionsDlgWidth = ls.TransitionsDlgWidth; TransitionsDlgHeight = ls.TransitionsDlgHeight; TransitionsColumnWidths = new int[ls.TransitionsColumnCount]; for (int i = 0; i < TransitionsColumnCount; i++) TransitionsColumnWidths[i] = ls.TransitionsColumnWidths[i]; MetrologyDlgLeft = ls.MetrologyDlgLeft; MetrologyDlgTop = ls.MetrologyDlgTop; MetrologyDlgWidth = ls.MetrologyDlgWidth; MetrologyDlgHeight = ls.MetrologyDlgHeight; ProceduresDlgLeft = ls.ProceduresDlgLeft; ProceduresDlgTop = ls.ProceduresDlgTop; ProceduresDlgWidth = ls.ProceduresDlgWidth; ProceduresDlgHeight = ls.ProceduresDlgHeight; OneProcedureDlgLeft = ls.OneProcedureDlgLeft; OneProcedureDlgTop = ls.OneProcedureDlgTop; OneProcedureDlgWidth = ls.OneProcedureDlgWidth; OneProcedureDlgHeight = ls.OneProcedureDlgHeight; ResultsConfigMeters = ls.ResultsConfigMeters; ResultsConfigTests = ls.ResultsConfigTests; int count = (ls.RsltItems_Screen_SingleWM != null) ? ls.RsltItems_Screen_SingleWM.Length : 0; RsltItems_Screen_SingleWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Screen_SingleWM[i] = ls.RsltItems_Screen_SingleWM[i]; count = (ls.RsltItems_Screen_CombinedWM != null) ? ls.RsltItems_Screen_CombinedWM.Length : 0; RsltItems_Screen_CombinedWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Screen_CombinedWM[i] = ls.RsltItems_Screen_CombinedWM[i]; count = (ls.RsltItems_Printer_SingleWM != null) ? ls.RsltItems_Printer_SingleWM.Length : 0; RsltItems_Printer_SingleWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Printer_SingleWM[i] = ls.RsltItems_Printer_SingleWM[i]; count = (ls.RsltItems_Printer_CombinedWM != null) ? ls.RsltItems_Printer_CombinedWM.Length : 0; RsltItems_Printer_CombinedWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Printer_CombinedWM[i] = ls.RsltItems_Printer_CombinedWM[i]; count = (ls.RsltItems_Disk_SingleWM != null) ? ls.RsltItems_Disk_SingleWM.Length : 0; RsltItems_Disk_SingleWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Disk_SingleWM[i] = ls.RsltItems_Disk_SingleWM[i]; count = (ls.RsltItems_Disk_CombinedWM != null) ? ls.RsltItems_Disk_CombinedWM.Length : 0; RsltItems_Disk_CombinedWM = new string[count]; for (int i = 0; i < count; i++) RsltItems_Disk_CombinedWM[i] = ls.RsltItems_Disk_CombinedWM[i]; RsltsSingleClmnWdths = new int[ls.RsltsSingleClmnCount]; for (int i = 0; i < RsltsSingleClmnCount; i++) RsltsSingleClmnWdths[i] = ls.RsltsSingleClmnWdths[i]; RsltsCombinedClmnWdths = new int[ls.RsltsCombinedClmnCount]; for (int i = 0; i < RsltsCombinedClmnCount; i++) RsltsCombinedClmnWdths[i] = ls.RsltsCombinedClmnWdths[i]; } } [XmlIgnore] public readonly bool AlwaysAskPasswdWhenUnlocking; [XmlIgnore] public readonly bool RestoreUserWhenLeavingDialog; public LocalSettings() { AlwaysAskPasswdWhenUnlocking = false; RestoreUserWhenLeavingDialog = true; } /// /// Load public fields of this class from the XML file. /// public void Load() { try { using (TextReader reader = new StreamReader(Program.LocalSettingsFileName)) { LocalSettings ls = (new XmlSerializer(typeof(LocalSettings))).Deserialize(reader) as LocalSettings; // Copy the settings just in case De-serialize() completes OK this.Assign(ls); } } catch (Exception e) { string msg = e.Message; } } /// /// 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; } } } }