Options.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms;
  7. using System.Drawing;
  8. using System.IO;
  9. using Newtonsoft.Json;
  10. namespace Optimizer
  11. {
  12. public class SettingsJson
  13. {
  14. public Theme Color { get; set; }
  15. }
  16. public static class Options
  17. {
  18. readonly static string flag = "themeable";
  19. internal readonly static string SettingsFile = Required.CoreFolder + "\\Optimizer.json";
  20. internal static SettingsJson CurrentOptions = new SettingsJson();
  21. // use this to determine if changes have been made
  22. private static SettingsJson Flag = new SettingsJson();
  23. internal static IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent)
  24. {
  25. List<Control> controls = new List<Control>();
  26. foreach (Control child in parent.Controls)
  27. {
  28. controls.AddRange(GetSelfAndChildrenRecursive(child));
  29. }
  30. controls.Add(parent);
  31. return controls;
  32. }
  33. internal static void ApplyTheme(Form f)
  34. {
  35. switch (CurrentOptions.Color)
  36. {
  37. case Theme.Caramel:
  38. SetTheme(f, Color.DarkOrange, Color.Chocolate);
  39. break;
  40. case Theme.Lime:
  41. SetTheme(f, Color.LimeGreen, Color.ForestGreen);
  42. break;
  43. case Theme.Magma:
  44. SetTheme(f, Color.Tomato, Color.Red);
  45. break;
  46. case Theme.Minimal:
  47. SetTheme(f, Color.Gray, Color.DimGray);
  48. break;
  49. case Theme.Ocean:
  50. SetTheme(f, Color.DodgerBlue, Color.RoyalBlue);
  51. break;
  52. case Theme.Zerg:
  53. SetTheme(f, Color.MediumOrchid, Color.DarkOrchid);
  54. break;
  55. }
  56. }
  57. private static void SetTheme(Form f, Color c1, Color c2)
  58. {
  59. GetSelfAndChildrenRecursive(f).OfType<Button>().ToList().ForEach(b => b.BackColor = c1);
  60. GetSelfAndChildrenRecursive(f).OfType<Button>().ToList().ForEach(b => b.FlatAppearance.BorderColor = c1);
  61. GetSelfAndChildrenRecursive(f).OfType<Button>().ToList().ForEach(b => b.FlatAppearance.MouseDownBackColor = c2);
  62. GetSelfAndChildrenRecursive(f).OfType<Button>().ToList().ForEach(b => b.FlatAppearance.MouseOverBackColor = c2);
  63. foreach (Label tmp in GetSelfAndChildrenRecursive(f).OfType<Label>().ToList())
  64. {
  65. if ((string)tmp.Tag == flag)
  66. {
  67. tmp.ForeColor = c1;
  68. }
  69. }
  70. foreach (LinkLabel tmp in GetSelfAndChildrenRecursive(f).OfType<LinkLabel>().ToList())
  71. {
  72. if ((string)tmp.Tag == flag)
  73. {
  74. tmp.LinkColor = c1;
  75. tmp.VisitedLinkColor = c1;
  76. tmp.ActiveLinkColor = c2;
  77. }
  78. }
  79. foreach (CheckBox tmp in GetSelfAndChildrenRecursive(f).OfType<CheckBox>().ToList())
  80. {
  81. if ((string)tmp.Tag == flag)
  82. {
  83. tmp.ForeColor = c1;
  84. }
  85. }
  86. }
  87. internal static void SaveSettings()
  88. {
  89. if (File.Exists(SettingsFile))
  90. {
  91. if (Flag.Color != CurrentOptions.Color)
  92. {
  93. using (FileStream fs = File.Open(SettingsFile, FileMode.OpenOrCreate))
  94. using (StreamWriter sw = new StreamWriter(fs))
  95. using (JsonWriter jw = new JsonTextWriter(sw))
  96. {
  97. jw.Formatting = Formatting.Indented;
  98. JsonSerializer serializer = new JsonSerializer();
  99. serializer.Serialize(jw, CurrentOptions);
  100. }
  101. }
  102. else
  103. {
  104. // no changes have been made, no need to save
  105. }
  106. }
  107. }
  108. internal static void LoadSettings()
  109. {
  110. if (!File.Exists(SettingsFile))
  111. {
  112. CurrentOptions.Color = Theme.Zerg;
  113. using (FileStream fs = File.Open(SettingsFile, FileMode.CreateNew))
  114. using (StreamWriter sw = new StreamWriter(fs))
  115. using (JsonWriter jw = new JsonTextWriter(sw))
  116. {
  117. jw.Formatting = Formatting.Indented;
  118. JsonSerializer serializer = new JsonSerializer();
  119. serializer.Serialize(jw, CurrentOptions);
  120. }
  121. }
  122. else
  123. {
  124. CurrentOptions = JsonConvert.DeserializeObject<SettingsJson>(File.ReadAllText(SettingsFile));
  125. // initialize flag
  126. Flag.Color = CurrentOptions.Color;
  127. }
  128. }
  129. }
  130. }