diff --git a/EduNetworkBuilder/EduNetworkBuilder.csproj b/EduNetworkBuilder/EduNetworkBuilder.csproj
index af7b6d9..fc246cc 100644
--- a/EduNetworkBuilder/EduNetworkBuilder.csproj
+++ b/EduNetworkBuilder/EduNetworkBuilder.csproj
@@ -91,6 +91,7 @@
IPAddressEntry.cs
+
Form
diff --git a/EduNetworkBuilder/LanguageString.cs b/EduNetworkBuilder/LanguageString.cs
new file mode 100644
index 0000000..5a45332
--- /dev/null
+++ b/EduNetworkBuilder/LanguageString.cs
@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using System.Text.RegularExpressions;
+
+namespace EduNetworkBuilder
+{
+ public class LanguageString
+ {
+
+ public string text="";
+ public string language="en";
+ public string tag_type;
+
+ public LanguageString(string lang, string msg, string tag)
+ {
+ text = msg;
+ language = lang;
+ tag_type = tag;
+ }
+
+ public LanguageString(XmlNode theNode, string tag)
+ {
+ XmlNodeType myNodetype = theNode.NodeType;
+ if (myNodetype == XmlNodeType.Element)
+ {
+ if(Regex.IsMatch(theNode.Name.ToLower(),"^[a-z][a-z]_" + tag))
+ {
+ //We have a language, and then a message
+ text = theNode.InnerText;
+ language = Regex.Replace(theNode.Name.ToLower(), "_" + tag, "");
+ }
+ else
+ {
+ //It is just a message. Use the default language.
+ language = "en";
+ text = theNode.InnerText;
+ }
+ }
+ tag_type = tag;
+ }
+
+ public void Save(XmlWriter writer)
+ {
+ writer.WriteElementString(language+"_" + tag_type, text);
+ }
+ }
+
+ public class LanguageStrings
+ {
+ List TheStrings = new List();
+ string tag = "";
+
+ ///
+ /// Make a language string list of type: "message", "title"
+ ///
+ /// Should be of type "message" or "title"
+ public LanguageStrings(string type)
+ {
+ tag = type;
+ }
+
+ public void Add(XmlNode theNode)
+ {
+ LanguageString oneString = new LanguageString(theNode, tag);
+ //remove duplicates
+ for (int i = TheStrings.Count - 1; i >= 0; i--)
+ {
+ if (TheStrings[i].language == oneString.language)
+ {
+ TheStrings.RemoveAt(i);
+ }
+ }
+ TheStrings.Add(oneString);
+ }
+ public void Add(string Text)
+ {
+ LanguageString oneString = new LanguageString(Properties.Settings.Default.ChosenLanguage,Text,tag);
+ //remove duplicates
+ for (int i = TheStrings.Count - 1; i >= 0; i--)
+ {
+ if (TheStrings[i].language == oneString.language)
+ {
+ TheStrings.RemoveAt(i);
+ }
+ }
+ TheStrings.Add(oneString);
+ }
+
+ public void Save(XmlWriter writer)
+ {
+ foreach(LanguageString LS in TheStrings)
+ {
+ LS.Save(writer);
+ }
+ }
+
+ public string GetText(string language)
+ {
+ //Find the matching language
+ foreach(LanguageString LS in TheStrings)
+ {
+ if(LS.language == language)
+ {
+ return LS.text;
+ }
+ }
+
+ //Return the english version if one exists
+ if(language != "en")
+ {
+ return GetText("en");
+ }
+
+ //return the first language (if the puzzle is only in french, use that.)
+ if (TheStrings.Count > 0)
+ return TheStrings[0].text;
+
+ //If there is no language, return a blank message
+ return "";
+ }
+
+ public string GetText()
+ {
+ return GetText(Properties.Settings.Default.ChosenLanguage);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs
index 22a4100..46eb8cc 100644
--- a/EduNetworkBuilder/Network.cs
+++ b/EduNetworkBuilder/Network.cs
@@ -7,7 +7,7 @@ using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.IO;
-
+using System.Text.RegularExpressions;
namespace EduNetworkBuilder
@@ -23,8 +23,8 @@ namespace EduNetworkBuilder
public int Level = 0;
public double SortOrder = 0;
public bool ShowLabels = false;
- public string NetMessage = "";
- public string NetTitle = "";
+ public LanguageStrings NetMessage;
+ public LanguageStrings NetTitle;
List NetComponents = new List();
//should have background image
Image TheNetImage = new Bitmap(1024, 1024);
@@ -51,6 +51,8 @@ namespace EduNetworkBuilder
{
TheNetImage = new Bitmap(myWidth, myHeight);
PuzzleName = Name;
+ NetMessage = new LanguageStrings("message");
+ NetTitle = new LanguageStrings("title");
}
private bool isDirty()
@@ -115,12 +117,6 @@ namespace EduNetworkBuilder
case "network":
Load(Individual,PuzzleName);
break;
- case "message":
- NetMessage = Individual.InnerText;
- break;
- case "title":
- NetTitle = Individual.InnerText;
- break;
case "showlabels":
bool.TryParse(Individual.InnerText, out ShowLabels);
break;
@@ -162,11 +158,23 @@ namespace EduNetworkBuilder
case "startinghelplevel":
StartingHelpLevel = NB.ParseEnum(Individual.InnerText);
HintsToDisplay = StartingHelpLevel;
+ break;
+ default:
+ if(Regex.IsMatch(Individual.Name.ToLower(),"message"))
+ {
+ NetMessage.Add(Individual);
+ }
+ else
+ if (Regex.IsMatch(Individual.Name.ToLower(), "title"))
+ {
+ NetTitle.Add(Individual);
+ }
+
break;
}
}
}
- if (NetMessage != "" && !AlreadyDisplayedMessage)
+ if (NetMessage.GetText() != "" && !AlreadyDisplayedMessage)
{
//We have a message loaded on this network. Display it
BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"];
@@ -176,7 +184,7 @@ namespace EduNetworkBuilder
}
else
{
- MessageBox.Show(NetMessage, NetTitle, MessageBoxButtons.OK);
+ MessageBox.Show(NetMessage.GetText(), NetTitle.GetText(), MessageBoxButtons.OK);
}
AlreadyDisplayedMessage = true;
}
@@ -219,8 +227,8 @@ namespace EduNetworkBuilder
//save the number of items
//Save all the items
writer.WriteStartElement("Network");
- writer.WriteElementString("message", NetMessage);
- writer.WriteElementString("title", NetTitle);
+ NetMessage.Save(writer);
+ NetTitle.Save(writer);
writer.WriteElementString("height", myHeight.ToString());
writer.WriteElementString("width", myWidth.ToString());
writer.WriteElementString("itemsize", itemsize.ToString());
diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs
index f050bf3..5fb6001 100644
--- a/EduNetworkBuilder/NetworkBuilder.cs
+++ b/EduNetworkBuilder/NetworkBuilder.cs
@@ -270,9 +270,9 @@ namespace EduNetworkBuilder
UpdateMessages();
processing = true;
Text = "EduNetworkBuilder";
- if (myNetwork.NetTitle != "")
- Text += ": " + myNetwork.NetTitle;
- if (myNetwork.NetMessage != "")
+ if (myNetwork.NetTitle.GetText() != "")
+ Text += ": " + myNetwork.NetTitle.GetText();
+ if (myNetwork.NetMessage.GetText() != "")
{
btnHelp.Visible = true;
}
@@ -1047,7 +1047,7 @@ namespace EduNetworkBuilder
RTFWindow rtwin = (RTFWindow)Application.OpenForms["RTFWindow"];
if (rtwin == null)
{
- rtwin = new RTFWindow("Help: " + myNetwork.NetTitle, myNetwork.NetMessage, myNetwork.NetTests);
+ rtwin = new RTFWindow("Help: " + myNetwork.NetTitle.GetText(), myNetwork.NetMessage.GetText(), myNetwork.NetTests);
rtwin.Show();
Activate();
}
diff --git a/EduNetworkBuilder/OptionsWindow.cs b/EduNetworkBuilder/OptionsWindow.cs
index bace3ca..8fb967d 100644
--- a/EduNetworkBuilder/OptionsWindow.cs
+++ b/EduNetworkBuilder/OptionsWindow.cs
@@ -69,8 +69,8 @@ namespace EduNetworkBuilder
private void LoadValuesFromNetwork()
{
tbItemSize.Text = myNet.itemsize.ToString();
- tbMessage.Text = myNet.NetMessage;
- tbNetworkTitle.Text = myNet.NetTitle;
+ tbMessage.Text = myNet.NetMessage.GetText();
+ tbNetworkTitle.Text = myNet.NetTitle.GetText();
cbDisplayTitles.Checked = myNet.ShowLabels;
tbNetworkX.Text = myNet.myWidth.ToString();
tbNetworkY.Text = myNet.myHeight.ToString();
@@ -105,8 +105,8 @@ namespace EduNetworkBuilder
private void SaveValuesToNetwork()
{
int.TryParse(tbItemSize.Text, out myNet.itemsize);
- myNet.NetMessage = tbMessage.Text;
- myNet.NetTitle = tbNetworkTitle.Text;
+ myNet.NetMessage.Add( tbMessage.Text);
+ myNet.NetTitle.Add(tbNetworkTitle.Text);
myNet.ShowLabels = cbDisplayTitles.Checked;
int.TryParse(tbNetworkX.Text, out myNet.myWidth);
int.TryParse(tbNetworkY.Text, out myNet.myHeight);
diff --git a/EduNetworkBuilder/Resources/ReleaseNotes.rtf b/EduNetworkBuilder/Resources/ReleaseNotes.rtf
index d3be033..fda40ae 100644
Binary files a/EduNetworkBuilder/Resources/ReleaseNotes.rtf and b/EduNetworkBuilder/Resources/ReleaseNotes.rtf differ