From 16f5c54ee9615f42610dae9591e854fe877483dd Mon Sep 17 00:00:00 2001 From: Tim Young Date: Fri, 16 Jun 2017 11:27:53 -0500 Subject: [PATCH] Mono does not like my settings for some reason. Moved settings to my own class that loads from properties.settings. Will load/save to xml in another commit. --- EduNetworkBuilder/EduNetworkBuilder.csproj | 1 + EduNetworkBuilder/LanguageString.cs | 6 +- EduNetworkBuilder/ListBoxWindow.cs | 44 ++++++------ EduNetworkBuilder/NB.cs | 22 ++++-- EduNetworkBuilder/NBSettings.cs | 82 ++++++++++++++++++++++ EduNetworkBuilder/Network.cs | 8 +-- EduNetworkBuilder/NetworkBuilder.cs | 44 ++++++------ 7 files changed, 150 insertions(+), 57 deletions(-) create mode 100644 EduNetworkBuilder/NBSettings.cs diff --git a/EduNetworkBuilder/EduNetworkBuilder.csproj b/EduNetworkBuilder/EduNetworkBuilder.csproj index 37a1bc9..963ee55 100644 --- a/EduNetworkBuilder/EduNetworkBuilder.csproj +++ b/EduNetworkBuilder/EduNetworkBuilder.csproj @@ -115,6 +115,7 @@ ListBoxWindow.cs + Form diff --git a/EduNetworkBuilder/LanguageString.cs b/EduNetworkBuilder/LanguageString.cs index 5a45332..9e3ad7f 100644 --- a/EduNetworkBuilder/LanguageString.cs +++ b/EduNetworkBuilder/LanguageString.cs @@ -78,7 +78,8 @@ namespace EduNetworkBuilder } public void Add(string Text) { - LanguageString oneString = new LanguageString(Properties.Settings.Default.ChosenLanguage,Text,tag); + NBSettings oursettings = NB.GetSettings(); + LanguageString oneString = new LanguageString(oursettings.ChosenLanguage,Text,tag); //remove duplicates for (int i = TheStrings.Count - 1; i >= 0; i--) { @@ -125,7 +126,8 @@ namespace EduNetworkBuilder public string GetText() { - return GetText(Properties.Settings.Default.ChosenLanguage); + NBSettings oursettings = NB.GetSettings(); + return GetText(oursettings.ChosenLanguage); } } } \ No newline at end of file diff --git a/EduNetworkBuilder/ListBoxWindow.cs b/EduNetworkBuilder/ListBoxWindow.cs index 0cf4b23..bf13ddd 100644 --- a/EduNetworkBuilder/ListBoxWindow.cs +++ b/EduNetworkBuilder/ListBoxWindow.cs @@ -43,6 +43,9 @@ namespace EduNetworkBuilder tbSearchBox.Visible = true; if (SelectedTag == NB.Translate("_All")) Text = Text + NB.Translate("_AllS"); + + NBSettings oursettings = NB.GetSettings(); + foreach (string str in NB.GetPuzzleTags()) { newCB = AddCheckBox(count, str); @@ -60,7 +63,7 @@ namespace EduNetworkBuilder btnOK.Text = NB.Translate("_Load"); btnAdd.Text = NB.Translate("_Cancel"); btnAdd.Visible = true; - cbLoadPuzzlesAtStart.Checked = Properties.Settings.Default.AutoStartPuzzles; + cbLoadPuzzlesAtStart.Checked = oursettings.AutoStartPuzzles; UpdateForm(); } @@ -151,12 +154,11 @@ namespace EduNetworkBuilder private string GetSelectedTag() { - if (Properties.Settings.Default.ScoreList == null) - Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); PuzzleInfo PI; string first = ""; + NBSettings oursettings = NB.GetSettings(); - string OriginalChoice = Properties.Settings.Default.ProcessingLevel; + string OriginalChoice = oursettings.ProcessingLevel; if(OriginalChoice != null) { if (NB.PuzzleLevelHasUnsolved(OriginalChoice)) @@ -165,7 +167,7 @@ namespace EduNetworkBuilder foreach (string str in NB.GetPuzzleNames()) { - if(!Properties.Settings.Default.ScoreList.Contains(str)) + if(!oursettings.ScoreList.Contains(str)) { PI = NB.GetPuzzleInfoFromName(str); first = "Level_" + PI.Level; @@ -222,10 +224,9 @@ namespace EduNetworkBuilder cbLoadPuzzlesAtStart.Visible = true; btnReset.Visible = true; PuzzleInfo pi; - if (Properties.Settings.Default.ScoreList == null) - Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); string shown_name; List Puzzles = NB.GetPuzzleNames(); + NBSettings oursettings = NB.GetSettings(); if (Puzzles == null) return; foreach (string str in Puzzles) { @@ -233,7 +234,7 @@ namespace EduNetworkBuilder { pi = NB.GetPuzzleInfoFromName(str); shown_name = pi.PuzzleName; - if (Properties.Settings.Default.ScoreList.Contains(str)) + if (oursettings.ScoreList.Contains(str)) shown_name = "* " + shown_name; foreach (string tag in pi.PuzzleTags) { @@ -250,7 +251,7 @@ namespace EduNetworkBuilder shown_name = pi.PuzzleName; bool added = false; string localFilter = ".*" + FilterString + ".*"; - if (Properties.Settings.Default.ScoreList.Contains(str)) + if (oursettings.ScoreList.Contains(str)) shown_name = "* " + shown_name; if (!added && pi.PuzzleName != null && Regex.IsMatch(pi.PuzzleName, localFilter, RegexOptions.IgnoreCase)) { @@ -295,6 +296,7 @@ namespace EduNetworkBuilder private void btnOK_Click(object sender, EventArgs e) { + NBSettings oursettings = NB.GetSettings(); if (MyMode == LBContents.puzzles && lbWindowData.SelectedItem != null) { string TheName = lbWindowData.SelectedItem.ToString(); @@ -305,10 +307,10 @@ namespace EduNetworkBuilder { myWin.Activate(); } - if(Properties.Settings.Default.AutoStartPuzzles != cbLoadPuzzlesAtStart.Checked) + if(oursettings.AutoStartPuzzles != cbLoadPuzzlesAtStart.Checked) { - Properties.Settings.Default.AutoStartPuzzles = cbLoadPuzzlesAtStart.Checked; - Properties.Settings.Default.Save(); + oursettings.AutoStartPuzzles = cbLoadPuzzlesAtStart.Checked; +// oursettings.Save(); } if (lbWindowData.SelectedItem != null) NB.LoadNetworkFromResource(TheName); @@ -360,6 +362,7 @@ namespace EduNetworkBuilder DebugLevel toFind; int mycount = 0; string labelname = ""; + NBSettings oursettings = NB.GetSettings(); if (MyMode == LBContents.puzzles) { foreach (Control mycontrol in panelCheckboxes.Controls) @@ -376,8 +379,8 @@ namespace EduNetworkBuilder if (mycount == 1) { //We only have one item checked. Store this value for later - Properties.Settings.Default.ProcessingLevel = labelname; - Properties.Settings.Default.Save(); + oursettings.ProcessingLevel = labelname; +// oursettings.Save(); } } if (MyMode == LBContents.messages) @@ -406,16 +409,17 @@ namespace EduNetworkBuilder private void btnAdd_Click(object sender, EventArgs e) { + NBSettings oursettings = NB.GetSettings(); if (MyMode == LBContents.routes) { AddRoute(); } if(MyMode == LBContents.puzzles) { - if (Properties.Settings.Default.AutoStartPuzzles != cbLoadPuzzlesAtStart.Checked) + if (oursettings.AutoStartPuzzles != cbLoadPuzzlesAtStart.Checked) { - Properties.Settings.Default.AutoStartPuzzles = cbLoadPuzzlesAtStart.Checked; - Properties.Settings.Default.Save(); + oursettings.AutoStartPuzzles = cbLoadPuzzlesAtStart.Checked; +// oursettings.Save(); } Close(); } @@ -499,13 +503,11 @@ namespace EduNetworkBuilder private void btnReset_Click(object sender, EventArgs e) { - if (Properties.Settings.Default.ScoreList == null) - Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); DialogResult answer = MessageBox.Show(NB.Translate("LBW_btnResetYouSure"), NB.Translate("LBW_btnResetForget"), MessageBoxButtons.YesNo); if (answer == System.Windows.Forms.DialogResult.Yes) { - Properties.Settings.Default.ScoreList.Clear(); - Properties.Settings.Default.Save(); + NBSettings oursettings = NB.GetSettings(); + oursettings.ScoreList.Clear(); UpdateForm(); } } diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs index 921dff8..4aaac24 100644 --- a/EduNetworkBuilder/NB.cs +++ b/EduNetworkBuilder/NB.cs @@ -326,13 +326,14 @@ namespace EduNetworkBuilder { BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; CultureInfo CI=null; + NBSettings oursettings = NB.GetSettings(); if (myWin != null) { CI = myWin.GetCulture(); } if(CI == null || myWin == null) { - string CL = Properties.Settings.Default.ChosenLanguage; + string CL = oursettings.ChosenLanguage; CI = CultureInfo.CreateSpecificCulture(CL); } return CI; @@ -358,6 +359,16 @@ namespace EduNetworkBuilder return myresource; } + public static NBSettings GetSettings() + { + BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; + if (myWin != null) + { + return myWin.OurSettings; + } + return new NBSettings(); //This is only in case we are blowing up. Try to avoid that. + } + /// /// Determine if we are using Mono or .Net. Some things get killed using Mono. /// @@ -460,7 +471,8 @@ namespace EduNetworkBuilder { //Find the window. If it exists, use /set the language setting there. If not, use / set the default. BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"]; - string lang = Properties.Settings.Default.ChosenLanguage; + NBSettings oursettings = NB.GetSettings(); + string lang = oursettings.ChosenLanguage; if (lang == "") lang = "en"; string StartingItem = ""; @@ -512,12 +524,12 @@ namespace EduNetworkBuilder LanguageForm.ShowDialog(); if (cbQuestions.SelectedIndex >= 0) { - Properties.Settings.Default.LanguageHasBeenChosen = true; + oursettings.LanguageHasBeenChosen = true; string mychoice = LanguageChoices[cbQuestions.SelectedIndex, 1]; if (myWin == null) { - Properties.Settings.Default.ChosenLanguage = mychoice; - //Properties.Settings.Default.Save(); //We do this when we exit. No need to save it right this instant. + oursettings.ChosenLanguage = mychoice; + //oursettings.Save(); //We do this when we exit. No need to save it right this instant. } else { diff --git a/EduNetworkBuilder/NBSettings.cs b/EduNetworkBuilder/NBSettings.cs new file mode 100644 index 0000000..226ba5e --- /dev/null +++ b/EduNetworkBuilder/NBSettings.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EduNetworkBuilder +{ + /// + /// We have settings that need to be loaded and saved. Mono has issues with + /// properties.settings.default stuff, so we need to load/save from an xml file + /// when we are using mono. So this class does that + /// + public class NBSettings + { + public string LastPath = ""; + public List ScoreList = new List(); + public bool AutoStartPuzzles = true; + public string ChosenLanguage = "en"; + public bool LanguageHasBeenChosen = false; + public int MainWindowX = -1; + public int MainWindowY = -1; + public int MainWindowWidth = -1; + public int MainWindowHeight = -1; + public string ProcessingLevel = "none"; + + public NBSettings() + { + if(NB.IsRunningOnMono()) + { + //Try loading from xml file + } + else + { + LastPath = Properties.Settings.Default.LastPath; + AutoStartPuzzles = Properties.Settings.Default.AutoStartPuzzles; + ChosenLanguage = Properties.Settings.Default.ChosenLanguage; + LanguageHasBeenChosen = Properties.Settings.Default.LanguageHasBeenChosen; + MainWindowX = Properties.Settings.Default.MainWindowX; + MainWindowY = Properties.Settings.Default.MainWindowY; + MainWindowHeight = Properties.Settings.Default.MainWindowHeight; + MainWindowWidth = Properties.Settings.Default.MainWindowWidth; + + foreach(string one in Properties.Settings.Default.ScoreList) + { + if (!ScoreList.Contains(one)) + ScoreList.Add(one); + } + } + } + + public void Save() + { + if(NB.IsRunningOnMono()) + { + //Save it to an XML file. + } + else + { + if (Properties.Settings.Default.ScoreList == null) + Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); + + Properties.Settings.Default.LastPath = LastPath; + Properties.Settings.Default.AutoStartPuzzles = AutoStartPuzzles; + Properties.Settings.Default.ChosenLanguage = ChosenLanguage; + Properties.Settings.Default.LanguageHasBeenChosen = LanguageHasBeenChosen; + Properties.Settings.Default.MainWindowX = MainWindowX; + Properties.Settings.Default.MainWindowY = MainWindowY; + Properties.Settings.Default.MainWindowHeight = MainWindowHeight; + Properties.Settings.Default.MainWindowWidth = MainWindowWidth; + + Properties.Settings.Default.ScoreList.Clear(); + foreach(string One in ScoreList) + { + Properties.Settings.Default.ScoreList.Add(One); + } + Properties.Settings.Default.Save(); + } + } + + } +} diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs index b58f043..ba45796 100644 --- a/EduNetworkBuilder/Network.cs +++ b/EduNetworkBuilder/Network.cs @@ -809,12 +809,10 @@ namespace EduNetworkBuilder PuzzleIsSolved = true; if (PuzzleName != "" && PuzzleName != null) { - if (Properties.Settings.Default.ScoreList == null) - Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); - if (!Properties.Settings.Default.ScoreList.Contains(PuzzleName)) + NBSettings oursettings = NB.GetSettings(); + if (!oursettings.ScoreList.Contains(PuzzleName)) { - Properties.Settings.Default.ScoreList.Add(PuzzleName); - Properties.Settings.Default.Save(); + oursettings.ScoreList.Add(PuzzleName); } } //kill all extra windows that no longer need to be open. diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs index 1c7bea3..020fcef 100644 --- a/EduNetworkBuilder/NetworkBuilder.cs +++ b/EduNetworkBuilder/NetworkBuilder.cs @@ -19,6 +19,8 @@ namespace EduNetworkBuilder public partial class BuilderWindow : Form { public Random GameRandomGen = new Random(); + public NBSettings OurSettings = new NBSettings(); //This will auto-load the settings + private int LastPacketID=1; public DebugPausePoint DebugSetting = DebugPausePoint.none; // public DebugPausePoint DebugSetting = DebugPausePoint.all | DebugPausePoint.dump; @@ -30,7 +32,7 @@ namespace EduNetworkBuilder private Point ClickedLocation; private Point ClickedImageLocation; DateTime LastClick = DateTime.Now; - private string LastPath = Properties.Settings.Default.LastPath; + private string LastPath = ""; private bool processing = false; private List PuzzleList = new List(); private ResourceManager LanguageResources = null; @@ -52,7 +54,10 @@ namespace EduNetworkBuilder public BuilderWindow() { InitializeComponent(); - if(!Properties.Settings.Default.LanguageHasBeenChosen) + + LastPath = OurSettings.LastPath; + + if(!OurSettings.LanguageHasBeenChosen) NB.ChangeLanguage(); LanguagifyComponents(); //I never implimented cut/copy/paste/undo. So we will remove them since they do nothing anyway @@ -164,7 +169,7 @@ namespace EduNetworkBuilder { if(LanguageCulture == null) { - string CL = Properties.Settings.Default.ChosenLanguage; + string CL = OurSettings.ChosenLanguage; if (CL != ChosenLanguage) ChosenLanguage = CL; LanguageCulture = CultureInfo.CreateSpecificCulture(ChosenLanguage); } @@ -495,14 +500,12 @@ namespace EduNetworkBuilder public bool PuzzleLevelHasUnsolved(string LevelName) { - if (Properties.Settings.Default.ScoreList == null) - Properties.Settings.Default.ScoreList = new System.Collections.Specialized.StringCollection(); - + foreach (PuzzleInfo pi in PuzzleList) { if ("Level_" + pi.Level.ToString() == LevelName) { - if (!Properties.Settings.Default.ScoreList.Contains(pi.PuzzleName)) + if (!OurSettings.ScoreList.Contains(pi.PuzzleName)) { return true; //We have one puzzle in the level which has not been solved } @@ -1430,16 +1433,8 @@ namespace EduNetworkBuilder private void BuilderWindow_FormClosing(object sender, FormClosingEventArgs e) { - Properties.Settings.Default.ChosenLanguage = ChosenLanguage; - Properties.Settings.Default.LastPath = LastPath; - if (WindowState == FormWindowState.Normal) - { - Properties.Settings.Default.MainWindowHeight = Height; - Properties.Settings.Default.MainWindowWidth = Width; - Properties.Settings.Default.MainWindowX = Location.X; - Properties.Settings.Default.MainWindowY = Location.Y; - } - Properties.Settings.Default.Save(); + //The values in the settings are all up-to-date. Just tell them to save. + OurSettings.Save(); } private void dHCPRequestToolStripMenuItem_Click(object sender, EventArgs e) @@ -1582,14 +1577,15 @@ namespace EduNetworkBuilder private void BuilderWindow_Load(object sender, EventArgs e) { - if (Properties.Settings.Default.MainWindowX != -1 && Properties.Settings.Default.MainWindowY != -1) + + if (OurSettings.MainWindowX != -1 && OurSettings.MainWindowY != -1) { - Location = new Point(Properties.Settings.Default.MainWindowX, Properties.Settings.Default.MainWindowY); + Location = new Point(OurSettings.MainWindowX, OurSettings.MainWindowY); } - if (Properties.Settings.Default.MainWindowHeight != -1 && Properties.Settings.Default.MainWindowWidth != -1) + if (OurSettings.MainWindowHeight != -1 && OurSettings.MainWindowWidth != -1) { - Height = Properties.Settings.Default.MainWindowHeight; - Width = Properties.Settings.Default.MainWindowWidth; + Height = OurSettings.MainWindowHeight; + Width = OurSettings.MainWindowWidth; } //If we started by clicking on a file, load that file if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Any()) @@ -1610,7 +1606,7 @@ namespace EduNetworkBuilder } else { - if (Properties.Settings.Default.AutoStartPuzzles) + if (OurSettings.AutoStartPuzzles) { //We are supposed to start the puzzle-selection box puzzlesToolStripMenuItem_Click(null, null); @@ -1702,7 +1698,7 @@ namespace EduNetworkBuilder DialogResult answer = MessageBox.Show(NB.Translate("NB_ChngLngClose"),NB.Translate("NB_ChngLngSure"),MessageBoxButtons.YesNoCancel); if (answer == System.Windows.Forms.DialogResult.Yes) { - Properties.Settings.Default.LanguageHasBeenChosen = false; //So we choose the language on restart + OurSettings.LanguageHasBeenChosen = false; //So we choose the language on restart //System.Diagnostics.Process.Start(Application.ExecutablePath); // to start new instance of application this.Close(); //to turn off current app }