diff options
Diffstat (limited to 'WarframeClock/Settings.cs')
-rw-r--r-- | WarframeClock/Settings.cs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/WarframeClock/Settings.cs b/WarframeClock/Settings.cs new file mode 100644 index 0000000..88502ed --- /dev/null +++ b/WarframeClock/Settings.cs @@ -0,0 +1,92 @@ +using System; +using System.Configuration; +using System.Globalization; +using System.Runtime.CompilerServices; + +namespace WarframeClock +{ + public static class Settings + { + public enum AlignmentX + { + Left, + Right + } + + public enum AlignmentY + { + Top, + Bottom + } + + private static AlignmentX _dockToX; + public static AlignmentX DockToX + { + get => _dockToX; + set => SetValue((_dockToX = value).ToString()); + } + + private static AlignmentY _dockToY; + public static AlignmentY DockToY + { + get => _dockToY; + set => SetValue((_dockToY = value).ToString()); + } + + private static double _marginX; + public static double MarginX + { + get => _marginX; + set => SetValue((_marginX = value).ToString(CultureInfo.InvariantCulture)); + } + + private static double _marginY; + public static double MarginY + { + get => _marginY; + set => SetValue((_marginY = value).ToString(CultureInfo.InvariantCulture)); + } + + private static string _fontFamilyName; + public static string FontFamilyName + { + get => _fontFamilyName; + set => SetValue(_fontFamilyName = value); + } + + private static double _fontSize; + public static double FontSize + { + get => _fontSize; + set => SetValue((_fontSize = value).ToString(CultureInfo.InvariantCulture)); + } + + private static readonly Configuration ExeConfiguration = + ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + + static Settings() + { + var s = ConfigurationManager.AppSettings; + _dockToX = Enum.TryParse(s.Get(nameof(DockToX)), out AlignmentX dockToX) ? dockToX : AlignmentX.Left; + _dockToY = Enum.TryParse(s.Get(nameof(DockToY)), out AlignmentY dockToY) ? dockToY : AlignmentY.Bottom; + _marginX = double.TryParse(s.Get(nameof(MarginX)), out var marginX) ? marginX : 20; + _marginY = double.TryParse(s.Get(nameof(MarginY)), out var marginY) ? marginY : 20; + _fontFamilyName = s.Get(nameof(FontFamilyName)) ?? "Segoe UI"; + _fontSize = double.TryParse(s.Get(nameof(FontSize)), out var fontSize) ? fontSize : 13; + } + + private static void SetValue(string value, [CallerMemberName] string key = null) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + ExeConfiguration.AppSettings.Settings.Remove(key); + ExeConfiguration.AppSettings.Settings.Add(key, value); + } + + public static void Save() + { + ExeConfiguration.Save(ConfigurationSaveMode.Full); + ConfigurationManager.RefreshSection("appSettings"); + } + } +} |