From b62155c76ef4f9f565f16cb8f23651d8c63aee10 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Fri, 16 Jun 2017 13:03:38 -0500 Subject: [PATCH] Code to save to an XML file and fixing localization issues. --- EduNetworkBuilder/NB.cs | 21 ++++-- EduNetworkBuilder/NBSettings.cs | 83 ++++++++++++++++++++-- EduNetworkBuilder/NetworkBuilder.cs | 102 ++++++++++++++-------------- 3 files changed, 145 insertions(+), 61 deletions(-) diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs index 4aaac24..016417d 100644 --- a/EduNetworkBuilder/NB.cs +++ b/EduNetworkBuilder/NB.cs @@ -322,11 +322,15 @@ namespace EduNetworkBuilder /// Find the global random number generator. /// /// A valid random number generator - public static CultureInfo GetCulture() + public static CultureInfo GetCulture(NBSettings theSettings = null) { BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; CultureInfo CI=null; - NBSettings oursettings = NB.GetSettings(); + NBSettings oursettings; + + if (theSettings == null) oursettings = NB.GetSettings(); + else oursettings = theSettings; + if (myWin != null) { CI = myWin.GetCulture(); @@ -419,13 +423,14 @@ namespace EduNetworkBuilder /// /// The key for the item we are translating /// A string of the translated information - public static string Translate(string key) + public static string Translate(string key, NBSettings theSettings=null) { BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; if (myWin == null) { ResourceManager RM = GetResource(); - CultureInfo CI = GetCulture(); + CultureInfo CI = GetCulture(theSettings); + string answer=""; answer = RM.GetString(key, CI); if (answer == null) return ""; @@ -467,11 +472,15 @@ namespace EduNetworkBuilder return mystring; } - public static void ChangeLanguage() + public static void ChangeLanguage(NBSettings theSettings=null) { //Find the window. If it exists, use /set the language setting there. If not, use / set the default. BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; - NBSettings oursettings = NB.GetSettings(); + NBSettings oursettings; + + if (theSettings == null) oursettings = NB.GetSettings(); + else oursettings = theSettings; + string lang = oursettings.ChosenLanguage; if (lang == "") lang = "en"; diff --git a/EduNetworkBuilder/NBSettings.cs b/EduNetworkBuilder/NBSettings.cs index 226ba5e..b407728 100644 --- a/EduNetworkBuilder/NBSettings.cs +++ b/EduNetworkBuilder/NBSettings.cs @@ -3,6 +3,11 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml; +using System.Reflection; +using System.Xml.Serialization; +using System.IO; +using System.Windows.Forms; namespace EduNetworkBuilder { @@ -26,9 +31,56 @@ namespace EduNetworkBuilder public NBSettings() { - if(NB.IsRunningOnMono()) + //We need this for reflection + } + public NBSettings(NBSettings fromSettings) + { + if (fromSettings == null) return; //Break if we are going to error out. + Duplicate(fromSettings, this); + } + + static void Duplicate(NBSettings FromClass, NBSettings ToClass) + { + if (FromClass == null) return; //Break if we are going to error out. + if (ToClass == null) return; //Break if we are going to error out. + // + ToClass.LastPath = FromClass.LastPath; + ToClass.AutoStartPuzzles = FromClass.AutoStartPuzzles; + ToClass.ChosenLanguage = FromClass.ChosenLanguage; + ToClass.LanguageHasBeenChosen = FromClass.LanguageHasBeenChosen; + ToClass.MainWindowX = FromClass.MainWindowX; + ToClass.MainWindowY = FromClass.MainWindowY; + ToClass.MainWindowHeight = FromClass.MainWindowHeight; + ToClass.MainWindowWidth = FromClass.MainWindowWidth; + + foreach (string one in FromClass.ScoreList) { - //Try loading from xml file + if (!ToClass.ScoreList.Contains(one)) + ToClass.ScoreList.Add(one); + } + } + + public NBSettings(bool UsingMono) + { + if(UsingMono) + { + try + { + //Try loading from xml file + string filename = GetFilename(); + if (File.Exists(filename)) + { + XmlSerializer sr = new XmlSerializer(this.GetType()); + TextReader Reader = new StreamReader(filename); + NBSettings settings = (NBSettings)sr.Deserialize(Reader); + Duplicate(settings, this); + Reader.Close(); + } + } + catch (Exception e) + { + MessageBox.Show("Error Loading Settings:\n" + e.ToString(),"Error Loading Settings"); + } } else { @@ -49,11 +101,34 @@ namespace EduNetworkBuilder } } - public void Save() + public static string GetFilename() { - if(NB.IsRunningOnMono()) + string BaseDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string FileName = "EduNetworkBuilder_config.xml"; + return Path.Combine(BaseDir, FileName); + } + + public void Save(bool UsingMono) + { + if(UsingMono) { //Save it to an XML file. + try + { + string filename = GetFilename(); + if(!Directory.Exists(Path.GetDirectoryName(filename))) + { + Directory.CreateDirectory(Path.GetDirectoryName(filename)); + } + XmlSerializer sr = new XmlSerializer(this.GetType()); + TextWriter writer = new StreamWriter(filename); + sr.Serialize(writer, this); + writer.Close(); + } + catch(Exception e) + { + MessageBox.Show("ERROR Saving Settings:\n" + e.ToString(),"Error saving settings."); + } } else { diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs index 020fcef..d6c1f8f 100644 --- a/EduNetworkBuilder/NetworkBuilder.cs +++ b/EduNetworkBuilder/NetworkBuilder.cs @@ -19,7 +19,7 @@ namespace EduNetworkBuilder public partial class BuilderWindow : Form { public Random GameRandomGen = new Random(); - public NBSettings OurSettings = new NBSettings(); //This will auto-load the settings + public NBSettings OurSettings = new NBSettings(NB.IsRunningOnMono()); //This will auto-load the settings private int LastPacketID=1; public DebugPausePoint DebugSetting = DebugPausePoint.none; @@ -58,7 +58,7 @@ namespace EduNetworkBuilder LastPath = OurSettings.LastPath; if(!OurSettings.LanguageHasBeenChosen) - NB.ChangeLanguage(); + NB.ChangeLanguage(OurSettings); LanguagifyComponents(); //I never implimented cut/copy/paste/undo. So we will remove them since they do nothing anyway cutToolStripMenuItem.Visible = false; @@ -72,12 +72,12 @@ namespace EduNetworkBuilder // Force the ToolTip text to be displayed whether or not the form is active. myTooltip.ShowAlways = true; - myTooltip.SetToolTip(rbHelp1, NB.Translate("NB_BuildWindNone")); - myTooltip.SetToolTip(rbHelp2, NB.Translate("NB_BuildWindColor")); - myTooltip.SetToolTip(rbHelp3, NB.Translate("NB_BuildWindMinor")); - myTooltip.SetToolTip(rbHelp4, NB.Translate("NB_BuildWindDecent")); - myTooltip.SetToolTip(btnHelp, NB.Translate("NB_BuildWindMsg")); - myTooltip.SetToolTip(cbViewTitles, NB.Translate("NB_cbViewTitles")); + myTooltip.SetToolTip(rbHelp1, NB.Translate("NB_BuildWindNone", OurSettings)); + myTooltip.SetToolTip(rbHelp2, NB.Translate("NB_BuildWindColor", OurSettings)); + myTooltip.SetToolTip(rbHelp3, NB.Translate("NB_BuildWindMinor", OurSettings)); + myTooltip.SetToolTip(rbHelp4, NB.Translate("NB_BuildWindDecent", OurSettings)); + myTooltip.SetToolTip(btnHelp, NB.Translate("NB_BuildWindMsg", OurSettings)); + myTooltip.SetToolTip(cbViewTitles, NB.Translate("NB_cbViewTitles", OurSettings)); myTooltip.Popup += myTooltip_Popup; lblStatus.Text = ""; @@ -111,47 +111,47 @@ namespace EduNetworkBuilder private void LanguagifyComponents() { - msMainMenuStrip.Text = NB.Translate("NB_msMainMenuStrip"); - fileToolStripMenuItem.Text = NB.Translate("NB_fileToolStripMenuItem"); - newToolStripMenuItem.Text = NB.Translate("LBW_btnAdd"); - loadToolStripMenuItem.Text = NB.Translate("_Load"); - reloadToolStripMenuItem.Text = NB.Translate("NB_reloadToolStripMenuItem"); - saveToolStripMenuItem.Text = NB.Translate("NB_saveToolStripMenuItem"); - exitToolStripMenuItem.Text = NB.Translate("NB_exitToolStripMenuItem"); - editToolStripMenuItem.Text = NB.Translate("_Edit"); - cutToolStripMenuItem.Text = NB.Translate("NB_cutToolStripMenuItem"); - copyToolStripMenuItem.Text = NB.Translate("NB_copyToolStripMenuItem"); - pasteToolStripMenuItem.Text = NB.Translate("NB_pasteToolStripMenuItem"); - undoToolStripMenuItem.Text = NB.Translate("NB_undoToolStripMenuItem"); - optionsToolStripMenuItem.Text = NB.Translate("NB_optionsToolStripMenuItem"); - allToolStripMenuItem.Text = NB.Translate("_All"); - dHCPRequestToolStripMenuItem.Text = NB.Translate("NB_NetViewDHCP"); - clearArpTableToolStripMenuItem.Text = NB.Translate("NB_NetViewClr"); - clearIPsToolStripMenuItem.Text = NB.Translate("NB_clearIPsToolStripMenuItem"); - pingToolStripMenuItem.Text = NB.Translate("_Ping"); - helpToolStripMenuItem.Text = NB.Translate("_Help"); - helpToolStripMenuItem1.Text = NB.Translate("_Help"); - aboutToolStripMenuItem.Text = NB.Translate("NB_aboutToolStripMenuItem"); - releaseNotesToolStripMenuItem.Text = NB.Translate("NB_releaseNotesToolStripMenuItem"); - checkForUpdatesToolStripMenuItem.Text = NB.Translate("NB_checkForUpdatesToolStripMenuItem"); - samplesToolStripMenuItem.Text = NB.Translate("NB_samplesToolStripMenuItem"); - puzzlesToolStripMenuItem.Text = NB.Translate("NB_puzzlesToolStripMenuItem"); - solvedToolStripMenuItem.Text = NB.Translate("_Solved"); - dHCPToolStripMenuItem.Text = NB.Translate("_DHCP"); - oneNetworkToolStripMenuItem.Text = NB.Translate("NB_OneNetwork"); - twoNetworksToolStripMenuItem.Text = NB.Translate("NB_TwoNetworks"); - threeNetworksToolStripMenuItem.Text = NB.Translate("NB_ThreeNetworks"); - firewallsToolStripMenuItem.Text = NB.Translate("NB_Firewalls"); - toSolveToolStripMenuItem.Text = NB.Translate("NB_toSolveToolStripMenuItem"); - solvedDHCPToolStripMenuItem.Text = NB.Translate("_DHCP"); - solvedOneNetworkToolStripMenuItem.Text = NB.Translate("NB_OneNetwork"); - solvedTwoNetworksToolStripMenuItem.Text = NB.Translate("NB_TwoNetworks"); - SolvedThreeNetworksToolStripMenuItem.Text = NB.Translate("NB_ThreeNetworks"); - firewallsToolStripMenuItem1.Text = NB.Translate("NB_Firewalls"); - lblStatus.Text = NB.Translate("NB_lblStatus"); - btnHelp.Text = NB.Translate("NB_btnHelp"); - changeLanguageToolStripMenuItem.Text = NB.Translate("NB_changeLanguageToolStripMenuItem"); - Text = NB.Translate("NB_Form"); + msMainMenuStrip.Text = NB.Translate("NB_msMainMenuStrip", OurSettings); + fileToolStripMenuItem.Text = NB.Translate("NB_fileToolStripMenuItem", OurSettings); + newToolStripMenuItem.Text = NB.Translate("LBW_btnAdd", OurSettings); + loadToolStripMenuItem.Text = NB.Translate("_Load", OurSettings); + reloadToolStripMenuItem.Text = NB.Translate("NB_reloadToolStripMenuItem", OurSettings); + saveToolStripMenuItem.Text = NB.Translate("NB_saveToolStripMenuItem", OurSettings); + exitToolStripMenuItem.Text = NB.Translate("NB_exitToolStripMenuItem", OurSettings); + editToolStripMenuItem.Text = NB.Translate("_Edit", OurSettings); + cutToolStripMenuItem.Text = NB.Translate("NB_cutToolStripMenuItem", OurSettings); + copyToolStripMenuItem.Text = NB.Translate("NB_copyToolStripMenuItem", OurSettings); + pasteToolStripMenuItem.Text = NB.Translate("NB_pasteToolStripMenuItem", OurSettings); + undoToolStripMenuItem.Text = NB.Translate("NB_undoToolStripMenuItem", OurSettings); + optionsToolStripMenuItem.Text = NB.Translate("NB_optionsToolStripMenuItem", OurSettings); + allToolStripMenuItem.Text = NB.Translate("_All", OurSettings); + dHCPRequestToolStripMenuItem.Text = NB.Translate("NB_NetViewDHCP", OurSettings); + clearArpTableToolStripMenuItem.Text = NB.Translate("NB_NetViewClr", OurSettings); + clearIPsToolStripMenuItem.Text = NB.Translate("NB_clearIPsToolStripMenuItem", OurSettings); + pingToolStripMenuItem.Text = NB.Translate("_Ping", OurSettings); + helpToolStripMenuItem.Text = NB.Translate("_Help", OurSettings); + helpToolStripMenuItem1.Text = NB.Translate("_Help", OurSettings); + aboutToolStripMenuItem.Text = NB.Translate("NB_aboutToolStripMenuItem", OurSettings); + releaseNotesToolStripMenuItem.Text = NB.Translate("NB_releaseNotesToolStripMenuItem", OurSettings); + checkForUpdatesToolStripMenuItem.Text = NB.Translate("NB_checkForUpdatesToolStripMenuItem", OurSettings); + samplesToolStripMenuItem.Text = NB.Translate("NB_samplesToolStripMenuItem", OurSettings); + puzzlesToolStripMenuItem.Text = NB.Translate("NB_puzzlesToolStripMenuItem", OurSettings); + solvedToolStripMenuItem.Text = NB.Translate("_Solved", OurSettings); + dHCPToolStripMenuItem.Text = NB.Translate("_DHCP", OurSettings); + oneNetworkToolStripMenuItem.Text = NB.Translate("NB_OneNetwork", OurSettings); + twoNetworksToolStripMenuItem.Text = NB.Translate("NB_TwoNetworks", OurSettings); + threeNetworksToolStripMenuItem.Text = NB.Translate("NB_ThreeNetworks", OurSettings); + firewallsToolStripMenuItem.Text = NB.Translate("NB_Firewalls", OurSettings); + toSolveToolStripMenuItem.Text = NB.Translate("NB_toSolveToolStripMenuItem", OurSettings); + solvedDHCPToolStripMenuItem.Text = NB.Translate("_DHCP", OurSettings); + solvedOneNetworkToolStripMenuItem.Text = NB.Translate("NB_OneNetwork", OurSettings); + solvedTwoNetworksToolStripMenuItem.Text = NB.Translate("NB_TwoNetworks", OurSettings); + SolvedThreeNetworksToolStripMenuItem.Text = NB.Translate("NB_ThreeNetworks", OurSettings); + firewallsToolStripMenuItem1.Text = NB.Translate("NB_Firewalls", OurSettings); + lblStatus.Text = NB.Translate("NB_lblStatus", OurSettings); + btnHelp.Text = NB.Translate("NB_btnHelp", OurSettings); + changeLanguageToolStripMenuItem.Text = NB.Translate("NB_changeLanguageToolStripMenuItem", OurSettings); + Text = NB.Translate("NB_Form", OurSettings); } public ResourceManager GetResource() @@ -401,7 +401,7 @@ namespace EduNetworkBuilder UpdateVisuals(); processing = true; cbViewTitles.Checked = myNetwork.ShowLabelsHere; - Text = NB.Translate("NB_UpdteFrmName"); + Text = NB.Translate("NB_UpdteFrmName", OurSettings); if (myNetwork.NetTitle.GetText() != "") Text += ": " + myNetwork.NetTitle.GetText(); if (myNetwork.NetMessage.GetText() != "") @@ -1434,7 +1434,7 @@ namespace EduNetworkBuilder private void BuilderWindow_FormClosing(object sender, FormClosingEventArgs e) { //The values in the settings are all up-to-date. Just tell them to save. - OurSettings.Save(); + OurSettings.Save(NB.IsRunningOnMono()); } private void dHCPRequestToolStripMenuItem_Click(object sender, EventArgs e)