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 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;
[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;
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];
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;
}
}
}
}