diff options
| author | a1xd <[email protected]> | 2020-08-22 22:33:45 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-08-22 22:33:45 -0400 |
| commit | 252637e53ca42353061dc3118e8625af6edc348f (patch) | |
| tree | 26ea73edae996242eaef559485309fb9c66f4d30 /grapher/Models/Serialized | |
| parent | Merge pull request #15 from JacobPalecki/GUI (diff) | |
| parent | delete personal settings.json left in repo (diff) | |
| download | rawaccel-252637e53ca42353061dc3118e8625af6edc348f.tar.xz rawaccel-252637e53ca42353061dc3118e8625af6edc348f.zip | |
Merge pull request #16 from JacobPalecki/Misc
Gain Styles, Settings File, and other miscellaneous
Diffstat (limited to 'grapher/Models/Serialized')
| -rw-r--r-- | grapher/Models/Serialized/GUISettings.cs | 33 | ||||
| -rw-r--r-- | grapher/Models/Serialized/ModifierArgs.cs | 75 | ||||
| -rw-r--r-- | grapher/Models/Serialized/RawAccelSettings.cs | 84 | ||||
| -rw-r--r-- | grapher/Models/Serialized/SettingsManager.cs | 123 |
4 files changed, 315 insertions, 0 deletions
diff --git a/grapher/Models/Serialized/GUISettings.cs b/grapher/Models/Serialized/GUISettings.cs new file mode 100644 index 0000000..7c8e9a4 --- /dev/null +++ b/grapher/Models/Serialized/GUISettings.cs @@ -0,0 +1,33 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Serialized +{ + [Serializable] + public class GUISettings + { + public GUISettings() {} + + public GUISettings(bool autoWrite, int dpi, int pollRate) + { + AutoWriteToDriverOnStartup = autoWrite; + DPI = dpi; + PollRate = pollRate; + } + + [JsonProperty(Order = 1)] + public bool AutoWriteToDriverOnStartup { get; set; } + + [JsonProperty(Order = 2)] + public int DPI { get; set; } + + [JsonProperty(Order = 3)] + public int PollRate { get; set; } + } +} diff --git a/grapher/Models/Serialized/ModifierArgs.cs b/grapher/Models/Serialized/ModifierArgs.cs new file mode 100644 index 0000000..206a3c9 --- /dev/null +++ b/grapher/Models/Serialized/ModifierArgs.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Models.Serialized +{ + public enum accel_mode + { + linear=1, classic, natural, logarithmic, sigmoid, power, naturalgain, sigmoidgain, noaccel + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + [Serializable] + public struct vec2d + { + public double x; + public double y; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + [Serializable] + public struct accel_args + { + public double offset; + public double accel; + public double limit; + public double exponent; + public double midpoint; + public double power_scale; + public double gain_cap; + public vec2d weight; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + [Serializable] + public struct accel_fn_args + { + public accel_args acc_args; + public int accel_mode; + public double time_min; + public vec2d cap; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + [Serializable] + public struct modifier_args + { + public double degrees; + public vec2d sens; + public accel_fn_args acc_fn_args; + + public modifier_args(ManagedAccel managedAccel) + { + degrees = managedAccel.Rotation; + sens.x = managedAccel.SensitivityX; + sens.y = managedAccel.SensitivityY; + acc_fn_args.accel_mode = managedAccel.Type; + acc_fn_args.time_min = managedAccel.MinimumTime; + acc_fn_args.cap.x = managedAccel.CapX; + acc_fn_args.cap.y = managedAccel.CapY; + acc_fn_args.acc_args.accel = managedAccel.Acceleration; + acc_fn_args.acc_args.exponent = managedAccel.LimitExp; + acc_fn_args.acc_args.gain_cap = managedAccel.GainCap; + acc_fn_args.acc_args.limit = managedAccel.LimitExp; + acc_fn_args.acc_args.midpoint = managedAccel.Midpoint; + acc_fn_args.acc_args.offset = managedAccel.Offset; + acc_fn_args.acc_args.power_scale = managedAccel.PowerScale; + acc_fn_args.acc_args.weight.x = managedAccel.WeightX; + acc_fn_args.acc_args.weight.y = managedAccel.WeightY; + } + } +} diff --git a/grapher/Models/Serialized/RawAccelSettings.cs b/grapher/Models/Serialized/RawAccelSettings.cs new file mode 100644 index 0000000..21a7f0c --- /dev/null +++ b/grapher/Models/Serialized/RawAccelSettings.cs @@ -0,0 +1,84 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Serialized +{ + [Serializable] + public class RawAccelSettings + { + public const string DefaultSettingsFileName = @"settings.json"; + public static readonly string ExecutingDirectory = AppDomain.CurrentDomain.BaseDirectory; + public static readonly string DefaultSettingsFile = Path.Combine(ExecutingDirectory, DefaultSettingsFileName); + public static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings + { + MissingMemberHandling = MissingMemberHandling.Error, + }; + + public RawAccelSettings() { } + + public RawAccelSettings( + ManagedAccel managedAccel, + GUISettings guiSettings) + { + AccelerationSettings = new modifier_args(managedAccel); + GUISettings = guiSettings; + } + + + public GUISettings GUISettings { get; set; } + + public modifier_args AccelerationSettings { get; set; } + + public static RawAccelSettings Load() + { + return Load(DefaultSettingsFile); + } + + public static RawAccelSettings Load(string file) + { + if (!Exists(file)) + { + throw new Exception($"Settings file does not exist at {file}"); + } + + RawAccelSettings deserializedSettings; + try + { + deserializedSettings = JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings); + } + catch(Exception e) + { + throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.", e); + } + + return deserializedSettings; + } + + public static bool Exists() + { + return Exists(DefaultSettingsFile); + } + + public static bool Exists(string file) + { + return File.Exists(file); + } + + public void Save() + { + Save(DefaultSettingsFile); + } + + public void Save(string file) + { + File.WriteAllText(file, JsonConvert.SerializeObject(this, Formatting.Indented)); + } + } +} diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs new file mode 100644 index 0000000..848606d --- /dev/null +++ b/grapher/Models/Serialized/SettingsManager.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Serialized +{ + public class SettingsManager + { + public SettingsManager( + ManagedAccel activeAccel, + Field dpiField, + Field pollRateField, + ToolStripMenuItem autoWrite) + { + ActiveAccel = activeAccel; + DpiField = dpiField; + PollRateField = pollRateField; + AutoWriteMenuItem = autoWrite; + } + + public ManagedAccel ActiveAccel { get; } + + public RawAccelSettings RawAccelSettings { get; private set; } + + private Field DpiField { get; set; } + + private Field PollRateField { get; set; } + + private ToolStripMenuItem AutoWriteMenuItem { get; set; } + + public void UpdateActiveSettings( + int mode, + double degrees, + double sensitivityX, + double sensitivityY, + double weightX, + double weightY, + double capX, + double capY, + double offset, + double accel, + double limitOrExp, + double midpoint, + double gainCap) + { + ActiveAccel.UpdateAccel( + mode, + degrees, + sensitivityX, + sensitivityY, + weightX, + weightY, + capX, + capY, + offset, + accel, + limitOrExp, + midpoint, + gainCap); + + RawAccelSettings.AccelerationSettings = new modifier_args(ActiveAccel); + RawAccelSettings.GUISettings = new GUISettings + { + AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked, + DPI = (int)DpiField.Data, + PollRate = (int)PollRateField.Data + }; + + RawAccelSettings.Save(); + } + + public void UpdateActiveAccelFromFileSettings() + { + ActiveAccel.UpdateAccel( + RawAccelSettings.AccelerationSettings.acc_fn_args.accel_mode, + RawAccelSettings.AccelerationSettings.degrees, + RawAccelSettings.AccelerationSettings.sens.x, + RawAccelSettings.AccelerationSettings.sens.y, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.weight.x, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.weight.y, + RawAccelSettings.AccelerationSettings.acc_fn_args.cap.x, + RawAccelSettings.AccelerationSettings.acc_fn_args.cap.y, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.offset, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.accel, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.exponent, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.midpoint, + RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.gain_cap); + DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI); + PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate); + AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup; + } + + public void Startup() + { + ActiveAccel.ReadFromDriver(); + + if(RawAccelSettings.Exists()) + { + RawAccelSettings = RawAccelSettings.Load(); + if (RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup) + { + UpdateActiveAccelFromFileSettings(); + } + } + else + { + RawAccelSettings = new RawAccelSettings( + ActiveAccel, + new GUISettings + { + AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked, + DPI = (int)DpiField.Data, + PollRate = (int)PollRateField.Data + }); + RawAccelSettings.Save(); + } + } + } +} |