summaryrefslogtreecommitdiff
path: root/grapher/Models/Serialized
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-08-22 02:46:45 -0700
committerJacob Palecki <[email protected]>2020-08-22 02:46:45 -0700
commitb874058d82a60a39163e91a26f370ff308b8af32 (patch)
tree7e14357f1e1e2b2b9726c72ae7b679fd5b475af2 /grapher/Models/Serialized
parentSerialization mostly working (diff)
downloadrawaccel-b874058d82a60a39163e91a26f370ff308b8af32.tar.xz
rawaccel-b874058d82a60a39163e91a26f370ff308b8af32.zip
Saving and loading fully works
Diffstat (limited to 'grapher/Models/Serialized')
-rw-r--r--grapher/Models/Serialized/GUISettings.cs40
-rw-r--r--grapher/Models/Serialized/ModifierArgs.cs75
-rw-r--r--grapher/Models/Serialized/RawAccelSettings.cs31
-rw-r--r--grapher/Models/Serialized/SettingsManager.cs123
4 files changed, 226 insertions, 43 deletions
diff --git a/grapher/Models/Serialized/GUISettings.cs b/grapher/Models/Serialized/GUISettings.cs
index 8c182ae..7c8e9a4 100644
--- a/grapher/Models/Serialized/GUISettings.cs
+++ b/grapher/Models/Serialized/GUISettings.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -11,41 +12,22 @@ namespace grapher.Models.Serialized
[Serializable]
public class GUISettings
{
- public GUISettings(
- Field dpiField,
- Field pollRateField,
- ToolStripMenuItem autoWriteMenuItem)
+ public GUISettings() {}
+
+ public GUISettings(bool autoWrite, int dpi, int pollRate)
{
- BindToGUI(dpiField, pollRateField, autoWriteMenuItem);
+ 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; }
-
- [field: NonSerialized]
- private Field DpiField { get; set; }
-
- [field: NonSerialized]
- private Field PollRateField { get; set; }
-
- [field: NonSerialized]
- private ToolStripMenuItem AutoWriteMenuItem { get; set; }
-
- public void UpdateSettings()
- {
- DPI = (int)DpiField.Data;
- PollRate = (int)PollRateField.Data;
- AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked;
- }
-
- public void BindToGUI(Field dpiField, Field pollRateField, ToolStripMenuItem autoWriteMenuItem)
- {
- DpiField = dpiField;
- PollRateField = pollRateField;
- AutoWriteMenuItem = autoWriteMenuItem;
- }
}
}
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
index d8896b6..21a7f0c 100644
--- a/grapher/Models/Serialized/RawAccelSettings.cs
+++ b/grapher/Models/Serialized/RawAccelSettings.cs
@@ -3,6 +3,7 @@ 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;
@@ -12,20 +13,29 @@ namespace grapher.Models.Serialized
[Serializable]
public class RawAccelSettings
{
- public const string DefaultSettingsFile = @".\settings.json";
+ 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)
{
- ManagedAccel = managedAccel;
+ AccelerationSettings = new modifier_args(managedAccel);
GUISettings = guiSettings;
}
- public ManagedAccel ManagedAccel { get; set; }
public GUISettings GUISettings { get; set; }
+ public modifier_args AccelerationSettings { get; set; }
+
public static RawAccelSettings Load()
{
return Load(DefaultSettingsFile);
@@ -38,21 +48,14 @@ namespace grapher.Models.Serialized
throw new Exception($"Settings file does not exist at {file}");
}
- object deserializedObject;
+ RawAccelSettings deserializedSettings;
try
{
- deserializedObject = JsonConvert.DeserializeObject(File.ReadAllText(file));
+ deserializedSettings = JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
}
- catch
- {
- throw new Exception($"Settings file at {file} does not contain valid JSON.");
- }
-
- RawAccelSettings deserializedSettings = (RawAccelSettings)deserializedObject;
-
- if (deserializedSettings == null)
+ catch(Exception e)
{
- throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.");
+ throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
}
return deserializedSettings;
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();
+ }
+ }
+ }
+}