aboutsummaryrefslogtreecommitdiffstats
path: root/WarframeClock/Settings.cs
diff options
context:
space:
mode:
Diffstat (limited to 'WarframeClock/Settings.cs')
-rw-r--r--WarframeClock/Settings.cs92
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");
+ }
+ }
+}