diff --git a/OctoAwesome/OctoAwesome.Client/Controls/OptionsOptionControl.cs b/OctoAwesome/OctoAwesome.Client/Controls/OptionsOptionControl.cs index 20b6c182..14c0e226 100644 --- a/OctoAwesome/OctoAwesome.Client/Controls/OptionsOptionControl.cs +++ b/OctoAwesome/OctoAwesome.Client/Controls/OptionsOptionControl.cs @@ -64,7 +64,7 @@ public OptionsOptionControl(ScreenComponent manager, OptionsScreen optionsScreen Checkbox disablePersistence = new Checkbox(manager) { - Checked = bool.Parse(settings.Get("DisablePersistence")), + Checked = settings.Get("DisablePersistence", false), HookBrush = new TextureBrush(manager.Game.Assets.LoadTexture(typeof(ScreenComponent), "iconCheck_brown"), TextureBrushMode.Stretch), }; disablePersistence.CheckedChanged += (state) => SetPersistence(state); @@ -110,7 +110,7 @@ public OptionsOptionControl(ScreenComponent manager, OptionsScreen optionsScreen Checkbox enableFullscreen = new Checkbox(manager) { - Checked = bool.Parse(settings.Get("EnableFullscreen")), + Checked = settings.Get("EnableFullscreen"), HookBrush = new TextureBrush(manager.Game.Assets.LoadTexture(typeof(ScreenComponent), "iconCheck_brown"), TextureBrushMode.Stretch), }; enableFullscreen.CheckedChanged += (state) => SetFullscreen(state); diff --git a/OctoAwesome/OctoAwesome.Client/OctoGame.cs b/OctoAwesome/OctoAwesome.Client/OctoGame.cs index 35ea3d33..0a6218ae 100644 --- a/OctoAwesome/OctoAwesome.Client/OctoGame.cs +++ b/OctoAwesome/OctoAwesome.Client/OctoGame.cs @@ -53,15 +53,11 @@ public OctoGame() //TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 15); - int width = 1080, height = 720; - if (Settings.KeyExists("Width")) - width = Settings.Get("Width"); - if (Settings.KeyExists("Height")) - height = Settings.Get("Height"); + int width = Settings.Get("Width", 1080); + int height = Settings.Get("Height", 720); Window.ClientSize = new Size(width, height); - if (Settings.KeyExists("EnableFullscreen") && Settings.Get("EnableFullscreen")) - Window.Fullscreen = true; + Window.Fullscreen = Settings.Get("EnableFullscreen", false); if (Settings.KeyExists("Viewrange")) { diff --git a/OctoAwesome/OctoAwesome.Client/Screens/LoadScreen.cs b/OctoAwesome/OctoAwesome.Client/Screens/LoadScreen.cs index 432394ee..2e2836ab 100644 --- a/OctoAwesome/OctoAwesome.Client/Screens/LoadScreen.cs +++ b/OctoAwesome/OctoAwesome.Client/Screens/LoadScreen.cs @@ -135,8 +135,7 @@ public LoadScreen(ScreenComponent manager) : base(manager) if (levelList.Items.Count >= 1) levelList.SelectedItem = levelList.Items[0]; - if (settings.KeyExists("LastUniverse") && settings.Get("LastUniverse") != null - && settings.Get("LastUniverse") != "") + if (settings.Get("LastUniverse") != null) { var lastlevel = levelList.Items.FirstOrDefault(u => u.Id == Guid.Parse(settings.Get("LastUniverse"))); if (lastlevel != null) diff --git a/OctoAwesome/OctoAwesome.Runtime/ResourceManager.cs b/OctoAwesome/OctoAwesome.Runtime/ResourceManager.cs index e4d22eb4..4e38665e 100644 --- a/OctoAwesome/OctoAwesome.Runtime/ResourceManager.cs +++ b/OctoAwesome/OctoAwesome.Runtime/ResourceManager.cs @@ -59,7 +59,7 @@ private ResourceManager() planets = new Dictionary(); - bool.TryParse(Settings.Get("DisablePersistence"), out disablePersistence); + disablePersistence = Settings.Get("DisablePersistence", false); } /// diff --git a/OctoAwesome/OctoAwesome.Tests/OctoAwesome.Tests.csproj b/OctoAwesome/OctoAwesome.Tests/OctoAwesome.Tests.csproj index 4e04f86c..fbf742f7 100644 --- a/OctoAwesome/OctoAwesome.Tests/OctoAwesome.Tests.csproj +++ b/OctoAwesome/OctoAwesome.Tests/OctoAwesome.Tests.csproj @@ -5,7 +5,7 @@ Debug AnyCPU - {7E2C82CC-CCC7-4837-9662-9850092BDC3B} + {0468B67C-E076-4B19-833C-382513606A5A} Library Properties OctoAwesome.Tests diff --git a/OctoAwesome/OctoAwesome.Tests/SettingsManagerTests.cs b/OctoAwesome/OctoAwesome.Tests/SettingsManagerTests.cs index 9b5c0d12..4255e4f4 100644 --- a/OctoAwesome/OctoAwesome.Tests/SettingsManagerTests.cs +++ b/OctoAwesome/OctoAwesome.Tests/SettingsManagerTests.cs @@ -1,74 +1,90 @@ -using System; -using System.Linq; -using System.Linq.Expressions; -using Xunit; - -namespace OctoAwesome.Tests -{ - - public class SettingsManagerTests - { - [Fact] - public void ReadWrite() - { - Settings settings = new Settings(true); - - string[] testArray = new string[] {"foo", "bar"}; - settings.Set("foo", testArray); - - string[] newArray = settings.GetArray("foo"); - - Assert.True(testArray.SequenceEqual(newArray)); - - - int[] testArrayInt = new int[] { 3,5,333,456,3457}; - settings.Set("fooInt", testArrayInt); - - int[] newArrayInt = settings.GetArray("fooInt"); - - Assert.True(testArray.SequenceEqual(newArray)); - - - bool[] testArrayBool = new bool[] { true, false}; - settings.Set("fooBool", testArrayBool); - - bool[] newArrayBool = settings.GetArray("fooBool"); - - Assert.True(testArray.SequenceEqual(newArray)); - - - String inputString = "randomStringWith§$%&/()=Charakters"; - settings.Set("inputString", inputString); - - - Assert.Equal(inputString, settings.Get("inputString")); - - - int inputInt = new Random().Next(); - settings.Set("inputInt", inputInt); - - Assert.Equal(inputInt, settings.Get("inputInt")); - - - bool inputBool = true; - settings.Set("inputBool", inputBool); - - Assert.Equal(inputBool, settings.Get("inputBool")); - - - - - - } - - [Fact] - public void NullTest() - { - - Settings settings = new Settings(true); - - int test = settings.Get("foobarnotset"); - Assert.Equal(0,test); - } - } -} +using System; +using System.Linq; +using System.Linq.Expressions; +using Xunit; + +namespace OctoAwesome.Tests +{ + public class SettingsManagerTests + { + [Fact] + public void ReadWrite() + { + Settings settings = new Settings(true); + + string[] testArray = new string[] { "foo", "bar" }; + settings.Set("foo", testArray); + + string[] newArray = settings.GetArray("foo"); + + Assert.True(testArray.SequenceEqual(newArray)); + + + int[] testArrayInt = new int[] { 3, 5, 333, 456, 3457 }; + settings.Set("fooInt", testArrayInt); + + int[] newArrayInt = settings.GetArray("fooInt"); + + Assert.True(testArray.SequenceEqual(newArray)); + + + bool[] testArrayBool = new bool[] { true, false }; + settings.Set("fooBool", testArrayBool); + + bool[] newArrayBool = settings.GetArray("fooBool"); + + Assert.True(testArray.SequenceEqual(newArray)); + + + String inputString = "randomStringWith§$%&/()=Charakters"; + settings.Set("inputString", inputString); + + + Assert.Equal(inputString, settings.Get("inputString")); + + + int inputInt = new Random().Next(); + settings.Set("inputInt", inputInt); + + Assert.Equal(inputInt, settings.Get("inputInt")); + + + bool inputBool = true; + settings.Set("inputBool", inputBool); + + Assert.Equal(inputBool, settings.Get("inputBool")); + } + + [Fact] + public void UnsetTest() + { + Settings settings = new Settings(true); + + int testInt = settings.Get("foobarnotset"); + Assert.Equal(0, testInt); + + string testString = settings.Get("foobarnotset"); + Assert.Equal(null, testString); + + int testIntDefault = settings.Get("foobarnotset", 42); + Assert.Equal(42, testIntDefault); + + string testStringDefault = settings.Get("foobarnotset", "ABC"); + Assert.Equal("ABC", testStringDefault); + } + + [Fact] + public void DeleteTest() + { + Settings settings = new Settings(true); + + settings.Set("test", 1); + int test1 = settings.Get("test"); + Assert.Equal(1, test1); + + settings.Delete("test"); + int test2 = settings.Get("test"); + Assert.Equal(0, test2); + } + } +} diff --git a/OctoAwesome/OctoAwesome/ISettings.cs b/OctoAwesome/OctoAwesome/ISettings.cs index e72da14e..d7e930e1 100644 --- a/OctoAwesome/OctoAwesome/ISettings.cs +++ b/OctoAwesome/OctoAwesome/ISettings.cs @@ -1,5 +1,8 @@ namespace OctoAwesome { + /// + /// Interface zur Verwaltung der Anwendungseinstellungen + /// public interface ISettings { /// @@ -9,6 +12,14 @@ public interface ISettings /// Der Wert der Einstellung. T Get(string key); + /// + /// Gibt den Wert einer Einstellung zurück. + /// + /// Der Schlüssel der Einstellung. + /// Default-Wert, der zurückgegeben wird, wenn der key nicht vorhanden ist. + /// Der Wert der Einstellung oder der Default-Wert. + T Get(string key, T defaultValue); + /// /// Gibt das Array einer Einstellung zurück /// @@ -65,5 +76,11 @@ public interface ISettings /// Der Schlüssel der Einstellung. /// Der Wert der Einstellung. void Set(string key, bool[] values); + + /// + /// Löscht eine Eigenschaft aus den Einstellungen + /// + /// Der Schlüssel der Einstellung + void Delete(string key); } } \ No newline at end of file diff --git a/OctoAwesome/OctoAwesome/Settings.cs b/OctoAwesome/OctoAwesome/Settings.cs index e00d6563..4469af1f 100644 --- a/OctoAwesome/OctoAwesome/Settings.cs +++ b/OctoAwesome/OctoAwesome/Settings.cs @@ -13,17 +13,18 @@ namespace OctoAwesome /// public class Settings : ISettings { + private Configuration _config; + /// - /// Bei UnitTests ist Assembly.GetEntryAssembly null, Gründe dazu gibts auf StackOverflow. - /// Um Schmerzen zu vermeiden wurde eine Variable eingeführt, die unabhängig testet. + /// Erzeugt eine neue Instanz der Klasse Settings, die auf die Konfigurationsdatei der aktuell laufenden Anwendung zugreift. /// - - private Configuration _config; + /// Bei UnitTests ist Assembly.GetEntryAssembly null, Gründe dazu gibts auf StackOverflow. + /// Um Schmerzen zu vermeiden wurde eine Variable eingeführt, die unabhängig testet. internal Settings(bool debug) { if (debug) { - ExeConfigurationFileMap map = new ExeConfigurationFileMap {ExeConfigFilename = "EXECONFIG_PATH"}; + ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = "EXECONFIG_PATH" }; _config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); } @@ -32,6 +33,10 @@ internal Settings(bool debug) _config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location); } } + + /// + /// Erzeugt eine neue Instanz der Klasse Settings, die auf die Konfigurationsdatei der aktuell laufenden Anwendung zugreift. + /// public Settings() { _config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location); @@ -44,14 +49,23 @@ public Settings() /// Der Wert der Einstellung. public T Get(string key) { - // var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location); - + return Get(key, default(T)); + } + + /// + /// Gibt den Wert einer Einstellung zurück. + /// + /// Der Schlüssel der Einstellung. + /// Default-Wert, der zurückgegeben wird, wenn der key nicht vorhanden ist. + /// Der Wert der Einstellung oder der Default-Wert. + public T Get(string key, T defaultValue) + { var settingElement = _config.AppSettings.Settings[key]; if (settingElement == null) - return default(T); + return defaultValue; var valueConfig = settingElement.Value; - return (T) Convert.ChangeType(valueConfig, typeof(T)); + return (T)Convert.ChangeType(valueConfig, typeof(T)); } /// @@ -74,8 +88,6 @@ public T[] GetArray(string key) /// public bool KeyExists(string key) { - - return _config.AppSettings.Settings.AllKeys.Contains(key); } @@ -85,9 +97,7 @@ public bool KeyExists(string key) /// Der Schlüssel der Einstellung. /// Der Wert der Einstellung. public void Set(string key, string value) - { - - + { if (_config.AppSettings.Settings.AllKeys.Contains(key)) _config.AppSettings.Settings[key].Value = value; else @@ -122,12 +132,10 @@ public void Set(string key, bool value) /// Der Wert der Einstellung. public void Set(string key, string[] values) { - /* Wir bauen das Array in eine Art serialisierten String um. - * Wenn eine Zeichenkette, die wir aus den Einstellugen lesen mit einer - * eckigen Klammer anfängt, ist es ein Array. - * [value1, value2, value3] - * - */ + // Wir bauen das Array in eine Art serialisierten String um. + // Wenn eine Zeichenkette, die wir aus den Einstellugen lesen mit einer + // eckigen Klammer anfängt, ist es ein Array. + // [value1, value2, value3] string writeString = "[" + String.Join(",", values) + "]"; Set(key, writeString); @@ -142,9 +150,7 @@ public void Set(string key, int[] values) { string[] strValues = new string[values.Length]; for (int i = 0; i < values.Length; i++) - { strValues[i] = Convert.ToString(values[i]); - } Set(key, strValues); } @@ -157,9 +163,7 @@ public void Set(string key, bool[] values) { string[] stringValues = new string[values.Length]; for (int i = 0; i < values.Length; i++) - { stringValues[i] = Convert.ToString(values[i]); - } Set(key, stringValues); } @@ -169,18 +173,24 @@ private T[] DeserializeArray(string arrayString) // Wir müssten, um beide Klammern zu entfernen, - 3 rechnen. Ich lasse die letzte Klammer stellvertretend für das Komma, was folgen würde, stehen. // Das wird in der for-Schleife auseinander gepflückt. - arrayString = arrayString.Substring(1, arrayString.Length - 2 /*- 1*/); string[] partsString = arrayString.Split(','); T[] tArray = new T[partsString.Length]; for (int i = 0; i < partsString.Length; i++) - { - tArray[i] = (T) Convert.ChangeType(partsString[i], typeof(T)); - } - + tArray[i] = (T)Convert.ChangeType(partsString[i], typeof(T)); return tArray; - } + } + + /// + /// Löscht eine Eigenschaft aus den Einstellungen + /// + /// Der Schlüssel der Einstellung + public void Delete(string key) + { + _config.AppSettings.Settings.Remove(key); + _config.Save(ConfigurationSaveMode.Modified, false); + } } } \ No newline at end of file