summaryrefslogtreecommitdiff
path: root/grapher/Models
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
parentSerialization mostly working (diff)
downloadrawaccel-b874058d82a60a39163e91a26f370ff308b8af32.tar.xz
rawaccel-b874058d82a60a39163e91a26f370ff308b8af32.zip
Saving and loading fully works
Diffstat (limited to 'grapher/Models')
-rw-r--r--grapher/Models/AccelGUI.cs71
-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
5 files changed, 259 insertions, 81 deletions
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs
index a0a76c8..e0dcc03 100644
--- a/grapher/Models/AccelGUI.cs
+++ b/grapher/Models/AccelGUI.cs
@@ -21,7 +21,7 @@ namespace grapher
RawAcceleration accelForm,
AccelCalculator accelCalculator,
AccelCharts accelCharts,
- ManagedAccel managedAccel,
+ SettingsManager settings,
AccelOptions accelOptions,
OptionXY sensitivity,
Option rotation,
@@ -39,7 +39,6 @@ namespace grapher
AccelForm = accelForm;
AccelCalculator = accelCalculator;
AccelCharts = accelCharts;
- ManagedAcceleration = managedAccel;
AccelerationOptions = accelOptions;
Sensitivity = sensitivity;
Rotation = rotation;
@@ -51,9 +50,8 @@ namespace grapher
Midpoint = midpoint;
WriteButton = writeButton;
ScaleMenuItem = scaleMenuItem;
-
- ManagedAcceleration.ReadFromDriver();
- SavedSettings = StartupLoad(AccelCalculator.DPI, AccelCalculator.PollRate, autoWriteMenuItem);
+ Settings = settings;
+ Settings.Startup();
UpdateGraph();
MouseWatcher = new MouseWatcher(AccelForm, mouseMoveLabel, AccelCharts);
@@ -67,13 +65,11 @@ namespace grapher
public RawAcceleration AccelForm { get; }
- public RawAccelSettings SavedSettings { get; }
-
public AccelCalculator AccelCalculator { get; }
public AccelCharts AccelCharts { get; }
- public ManagedAccel ManagedAcceleration { get; }
+ public SettingsManager Settings { get; }
public AccelOptions AccelerationOptions { get; }
@@ -103,44 +99,43 @@ namespace grapher
#region methods
+ public void UpdateActiveSettingsFromFields()
+ {
+ Settings.UpdateActiveSettings(
+ AccelerationOptions.AccelerationIndex,
+ Rotation.Field.Data,
+ Sensitivity.Fields.X,
+ Sensitivity.Fields.Y,
+ Weight.Fields.X,
+ Weight.Fields.Y,
+ Cap.SensitivityCapX,
+ Cap.SensitivityCapY,
+ Offset.Field.Data,
+ Acceleration.Field.Data,
+ LimitOrExponent.Field.Data,
+ Midpoint.Field.Data,
+ Cap.VelocityGainCap);
+ UpdateGraph();
+ }
+
public void UpdateGraph()
{
- AccelCalculator.Calculate(AccelCharts.AccelData, ManagedAcceleration);
+ AccelCalculator.Calculate(AccelCharts.AccelData, Settings.ActiveAccel);
AccelCharts.Bind();
UpdateActiveValueLabels();
- SavedSettings.Save();
}
public void UpdateActiveValueLabels()
{
- Sensitivity.SetActiveValues(ManagedAcceleration.SensitivityX, ManagedAcceleration.SensitivityY);
- Rotation.SetActiveValue(ManagedAcceleration.Rotation);
- AccelerationOptions.SetActiveValue(ManagedAcceleration.Type);
- Offset.SetActiveValue(ManagedAcceleration.Offset);
- Acceleration.SetActiveValue(ManagedAcceleration.Acceleration);
- Cap.SetActiveValues(ManagedAcceleration.GainCap, ManagedAcceleration.CapX, ManagedAcceleration.CapY, ManagedAcceleration.GainCapEnabled);
- Weight.SetActiveValues(ManagedAcceleration.WeightX, ManagedAcceleration.WeightY);
- LimitOrExponent.SetActiveValue(ManagedAcceleration.LimitExp);
- Midpoint.SetActiveValue(ManagedAcceleration.Midpoint);
- }
-
- private RawAccelSettings StartupLoad(Field dpiField, Field pollRateField, ToolStripMenuItem autoWriteMenuItem)
- {
- if (RawAccelSettings.Exists())
- {
- var settings = RawAccelSettings.Load();
- settings.GUISettings.BindToGUI(dpiField, pollRateField, autoWriteMenuItem);
- return settings;
- }
- else
- {
- return new RawAccelSettings(
- ManagedAcceleration,
- new GUISettings(
- AccelCalculator.DPI,
- AccelCalculator.PollRate,
- autoWriteMenuItem));
- }
+ Sensitivity.SetActiveValues(Settings.ActiveAccel.SensitivityX, Settings.ActiveAccel.SensitivityY);
+ Rotation.SetActiveValue(Settings.ActiveAccel.Rotation);
+ AccelerationOptions.SetActiveValue(Settings.ActiveAccel.Type);
+ Offset.SetActiveValue(Settings.ActiveAccel.Offset);
+ Acceleration.SetActiveValue(Settings.ActiveAccel.Acceleration);
+ Cap.SetActiveValues(Settings.ActiveAccel.GainCap, Settings.ActiveAccel.CapX, Settings.ActiveAccel.CapY, Settings.ActiveAccel.GainCapEnabled);
+ Weight.SetActiveValues(Settings.ActiveAccel.WeightX, Settings.ActiveAccel.WeightY);
+ LimitOrExponent.SetActiveValue(Settings.ActiveAccel.LimitExp);
+ Midpoint.SetActiveValue(Settings.ActiveAccel.Midpoint);
}
private void OnScaleMenuItemClick(object sender, EventArgs e)
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();
+ }
+ }
+ }
+}