diff options
| author | Jacob Palecki <[email protected]> | 2020-09-04 01:15:12 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-09-04 01:15:12 -0700 |
| commit | 87ee655d3c0ba3cdb0ca71a1b66aeb02c8c6aa70 (patch) | |
| tree | a2ca5c42352737e3dab48ec854c1cd068a282e46 /grapher/Models | |
| parent | The menus mostly work (diff) | |
| parent | Merge pull request #19 from JacobPalecki/gainOffset (diff) | |
| download | rawaccel-87ee655d3c0ba3cdb0ca71a1b66aeb02c8c6aa70.tar.xz rawaccel-87ee655d3c0ba3cdb0ca71a1b66aeb02c8c6aa70.zip | |
Merge with master
Diffstat (limited to 'grapher/Models')
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 11 | ||||
| -rw-r--r-- | grapher/Models/AccelGUIFactory.cs | 30 | ||||
| -rw-r--r-- | grapher/Models/Options/AccelOptionSet.cs | 13 | ||||
| -rw-r--r-- | grapher/Models/Options/CapOptions.cs | 26 | ||||
| -rw-r--r-- | grapher/Models/Options/OffsetOptions.cs | 124 | ||||
| -rw-r--r-- | grapher/Models/Serialized/DriverSettings.cs | 30 | ||||
| -rw-r--r-- | grapher/Models/Serialized/SettingsManager.cs | 24 |
7 files changed, 203 insertions, 55 deletions
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index 3a15d48..e9e925f 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -78,7 +78,7 @@ namespace grapher public void UpdateActiveSettingsFromFields() { - Settings.UpdateActiveSettings(new DriverSettings + var settings = new DriverSettings { rotation = Rotation.Field.Data, sensitivity = new Vec2<double> @@ -90,6 +90,14 @@ namespace grapher modes = ApplyOptions.GetModes(), args = ApplyOptions.GetArgs(), minimumTime = .4 + }; + + Settings.UpdateActiveSettings(settings, () => + { + AccelForm.Invoke((MethodInvoker)delegate + { + UpdateGraph(); + }); }); RefreshOnRead(); } @@ -117,7 +125,6 @@ namespace grapher Sensitivity.SetActiveValues(settings.sensitivity.x, settings.sensitivity.y); Rotation.SetActiveValue(settings.rotation); ApplyOptions.SetActiveValues(settings); - } private void OnScaleMenuItemClick(object sender, EventArgs e) diff --git a/grapher/Models/AccelGUIFactory.cs b/grapher/Models/AccelGUIFactory.cs index 8ed4d72..230b64d 100644 --- a/grapher/Models/AccelGUIFactory.cs +++ b/grapher/Models/AccelGUIFactory.cs @@ -30,8 +30,10 @@ namespace grapher.Models ToolStripMenuItem showVelocityGainToolStripMenuItem, ToolStripMenuItem wholeVectorToolStripMenuItem, ToolStripMenuItem byVectorComponentToolStripMenuItem, - ToolStripMenuItem sensitivityToolStripMenuItem, - ToolStripMenuItem velocityGainToolStripMenuItem, + ToolStripMenuItem velocityGainCapToolStripMenuItem, + ToolStripMenuItem legacyCapToolStripMenuItem, + ToolStripMenuItem gainOffsetToolStripMenuItem, + ToolStripMenuItem legacyOffsetToolStripMenuItem, ToolStripMenuItem autoWriteMenuItem, ToolStripMenuItem scaleMenuItem, ToolStripTextBox dpiTextBox, @@ -173,6 +175,16 @@ namespace grapher.Models new ActiveValueLabel(offsetActiveLabelY, activeValueTitle), "Offset"); + var offsetOptionsX = new OffsetOptions( + gainOffsetToolStripMenuItem, + legacyOffsetToolStripMenuItem, + offsetX); + + var offsetOptionsY = new OffsetOptions( + gainOffsetToolStripMenuItem, + legacyOffsetToolStripMenuItem, + offsetY); + // The name and layout of these options is handled by AccelerationOptions object. var accelerationX = new Option( new Field(accelerationBoxX, form, 0), @@ -239,13 +251,13 @@ namespace grapher.Models new ActiveValueLabel(accelTypeActiveLabelY, activeValueTitle)); var capOptionsX = new CapOptions( - sensitivityToolStripMenuItem, - velocityGainToolStripMenuItem, + velocityGainCapToolStripMenuItem, + legacyCapToolStripMenuItem, capX); var capOptionsY = new CapOptions( - sensitivityToolStripMenuItem, - velocityGainToolStripMenuItem, + velocityGainCapToolStripMenuItem, + legacyCapToolStripMenuItem, capY); var optionsSetX = new AccelOptionSet( @@ -255,9 +267,9 @@ namespace grapher.Models accelerationX, capOptionsX, weightX, - offsetX, + offsetOptionsX, limitOrExponentX, - midpointX); ; + midpointX); var optionsSetY = new AccelOptionSet( optionSetYTitle, @@ -266,7 +278,7 @@ namespace grapher.Models accelerationY, capOptionsY, weightY, - offsetY, + offsetOptionsY, limitOrExponentY, midpointY); diff --git a/grapher/Models/Options/AccelOptionSet.cs b/grapher/Models/Options/AccelOptionSet.cs index b1f85a9..838917c 100644 --- a/grapher/Models/Options/AccelOptionSet.cs +++ b/grapher/Models/Options/AccelOptionSet.cs @@ -17,7 +17,7 @@ namespace grapher.Models.Options Option acceleration, CapOptions cap, Option weight, - Option offset, + OffsetOptions offset, Option limitOrExp, Option midpoint) { @@ -50,7 +50,7 @@ namespace grapher.Models.Options public Option Weight { get; } - public Option Offset { get; } + public OffsetOptions Offset { get; } public Option LimitOrExponent { get; } @@ -126,7 +126,8 @@ namespace grapher.Models.Options args.limit = LimitOrExponent.Field.Data; args.exponent = LimitOrExponent.Field.Data; args.powerExponent = LimitOrExponent.Field.Data; - args.offset = Offset.Field.Data; + args.offset = Offset.Offset; + args.legacy_offset = Offset.LegacyOffset; args.midpoint = Midpoint.Field.Data; args.weight = Weight.Field.Data; } @@ -143,7 +144,7 @@ namespace grapher.Models.Options AccelTypeOptions.SetActiveValue(mode); Weight.SetActiveValue(args.weight); Cap.SetActiveValues(args.gainCap, args.scaleCap, args.gainCap > 0); - Offset.SetActiveValue(args.offset); + Offset.SetActiveValue(args.offset, args.legacy_offset); Acceleration.SetActiveValue(args.accel); LimitOrExponent.SetActiveValue(args.exponent); Midpoint.SetActiveValue(args.midpoint); @@ -155,8 +156,8 @@ namespace grapher.Models.Options Acceleration.Top = AccelTypeOptions.Top + AccelTypeOptions.Height + Constants.OptionVerticalSeperation; Cap.SnapTo(Acceleration); Weight.SnapTo(Cap); - Offset.SnapTo(Weight); - LimitOrExponent.SnapTo(Offset); + Offset.OffsetOption.SnapTo(Weight); + LimitOrExponent.SnapTo(Offset.OffsetOption); Midpoint.SnapTo(LimitOrExponent); } } diff --git a/grapher/Models/Options/CapOptions.cs b/grapher/Models/Options/CapOptions.cs index 713842c..6dc1116 100644 --- a/grapher/Models/Options/CapOptions.cs +++ b/grapher/Models/Options/CapOptions.cs @@ -18,29 +18,29 @@ namespace grapher #region Constructors public CapOptions( - ToolStripMenuItem sensitivityCapCheck, ToolStripMenuItem velocityGainCapCheck, + ToolStripMenuItem legacyCapCheck, Option capOption) { - SensitivityCapCheck = sensitivityCapCheck; VelocityGainCapCheck = velocityGainCapCheck; + LegacyCapCheck = legacyCapCheck; CapOption = capOption; - SensitivityCapCheck.Click += new System.EventHandler(OnSensitivityCapCheckClick); + LegacyCapCheck.Click += new System.EventHandler(OnSensitivityCapCheckClick); VelocityGainCapCheck.Click += new System.EventHandler(OnVelocityGainCapCheckClick); - SensitivityCapCheck.CheckedChanged += new System.EventHandler(OnSensitivityCapCheckedChange); + LegacyCapCheck.CheckedChanged += new System.EventHandler(OnSensitivityCapCheckedChange); VelocityGainCapCheck.CheckedChanged += new System.EventHandler(OnVelocityGainCapCheckedChange); - EnableSensitivityCap(); + EnableVelocityGainCap(); } #endregion Constructors #region Properties - public ToolStripMenuItem SensitivityCapCheck { get; } + public ToolStripMenuItem LegacyCapCheck { get; } public ToolStripMenuItem VelocityGainCapCheck { get; } @@ -124,7 +124,7 @@ namespace grapher CapOption.ActiveValueLabel.FormatString = Constants.GainCapFormatString; CapOption.ActiveValueLabel.Prefix = "Gain"; CapOption.SetActiveValue(gainCap); - SensitivityCapCheck.Checked = true; + LegacyCapCheck.Checked = true; VelocityGainCapCheck.Checked = false; } else @@ -132,17 +132,17 @@ namespace grapher CapOption.ActiveValueLabel.FormatString = Constants.DefaultActiveValueFormatString; CapOption.ActiveValueLabel.Prefix = string.Empty; CapOption.SetActiveValue(sensCap); - SensitivityCapCheck.Checked = false; + LegacyCapCheck.Checked = false; VelocityGainCapCheck.Checked = true; } } void OnSensitivityCapCheckClick(object sender, EventArgs e) { - if (!SensitivityCapCheck.Checked) + if (!LegacyCapCheck.Checked) { VelocityGainCapCheck.Checked = false; - SensitivityCapCheck.Checked = true; + LegacyCapCheck.Checked = true; } } @@ -151,13 +151,13 @@ namespace grapher if (!VelocityGainCapCheck.Checked) { VelocityGainCapCheck.Checked = true; - SensitivityCapCheck.Checked = false; + LegacyCapCheck.Checked = false; } } void OnSensitivityCapCheckedChange(object sender, EventArgs e) { - if (SensitivityCapCheck.Checked) + if (LegacyCapCheck.Checked == true) { EnableSensitivityCap(); } @@ -165,7 +165,7 @@ namespace grapher void OnVelocityGainCapCheckedChange(object sender, EventArgs e) { - if (SensitivityCapCheck.Checked) + if (LegacyCapCheck.Checked == true) { EnableVelocityGainCap(); } diff --git a/grapher/Models/Options/OffsetOptions.cs b/grapher/Models/Options/OffsetOptions.cs new file mode 100644 index 0000000..0b01ab9 --- /dev/null +++ b/grapher/Models/Options/OffsetOptions.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Options +{ + public class OffsetOptions + { + public OffsetOptions( + ToolStripMenuItem velocityGainOffsetCheck, + ToolStripMenuItem legacyOffsetCheck, + Option offsetOption) + { + VelocityGainOffsetCheck = velocityGainOffsetCheck; + LegacyOffsetCheck = legacyOffsetCheck; + OffsetOption = offsetOption; + + VelocityGainOffsetCheck.Click += new System.EventHandler(OnVelocityGainOffsetClick); + LegacyOffsetCheck.Click += new System.EventHandler(OnLegacyOffsetClick); + + VelocityGainOffsetCheck.CheckedChanged += new System.EventHandler(OnVelocityGainOffsetCheckedChange); + LegacyOffsetCheck.CheckedChanged += new System.EventHandler(OnLegacyOffsetCheckedChange); + + VelocityGainOffsetCheck.Checked = true; + } + + public ToolStripMenuItem VelocityGainOffsetCheck { get; } + + public ToolStripMenuItem LegacyOffsetCheck { get; } + + public Option OffsetOption { get; } + + public bool IsLegacy { get; private set; } + + public double LegacyOffset + { + get + { + if (IsLegacy) + { + return OffsetOption.Field.Data; + } + else + { + return 0; + } + } + } + + public double Offset + { + get + { + if (IsLegacy) + { + return 0; + } + else + { + return OffsetOption.Field.Data; + } + } + } + + public void SetActiveValue(double offset, double legacyOffset) + { + if (offset > 0) + { + OffsetOption.SetActiveValue(offset); + } + else + { + OffsetOption.SetActiveValue(legacyOffset); + } + } + + public void OnVelocityGainOffsetClick(object sender, EventArgs e) + { + if (!VelocityGainOffsetCheck.Checked) + { + VelocityGainOffsetCheck.Checked = true; + LegacyOffsetCheck.Checked = false; + } + } + + public void OnLegacyOffsetClick(object sender, EventArgs e) + { + if (!LegacyOffsetCheck.Checked) + { + LegacyOffsetCheck.Checked = true; + VelocityGainOffsetCheck.Checked = false; + } + } + + public void OnVelocityGainOffsetCheckedChange(object sender, EventArgs e) + { + if (VelocityGainOffsetCheck.Checked) + { + EnableVelocityGainOffset(); + } + } + + public void OnLegacyOffsetCheckedChange(object sender, EventArgs e) + { + if (LegacyOffsetCheck.Checked) + { + EnableLegacyOffset(); + } + } + + public void EnableVelocityGainOffset() + { + IsLegacy = false; + } + + public void EnableLegacyOffset() + { + IsLegacy = true; + } + } +} diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs index e0b5d4a..ecd4d51 100644 --- a/grapher/Models/Serialized/DriverSettings.cs +++ b/grapher/Models/Serialized/DriverSettings.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.InteropServices; +using System.Threading; namespace grapher.Models.Serialized { @@ -18,6 +19,7 @@ namespace grapher.Models.Serialized public struct AccelArgs { public double offset; + public double legacy_offset; public double accel; public double limit; public double exponent; @@ -47,6 +49,7 @@ namespace grapher.Models.Serialized private static readonly IntPtr UnmanagedSettingsHandle = Marshal.AllocHGlobal(Marshal.SizeOf<DriverSettings>()); + private static object UnmanagedSettingsLock = new object(); public double rotation; public bool combineMagnitudes; @@ -65,21 +68,32 @@ namespace grapher.Models.Serialized return Marshal.PtrToStructure<DriverSettings>(UnmanagedSettingsHandle); } - public static void SetActive(DriverSettings settings) + public static void SetActive(DriverSettings settings, Action<IntPtr> unmanagedActionBefore = null) { - Marshal.StructureToPtr(settings, UnmanagedSettingsHandle, false); - DriverInterop.SetActiveSettings(UnmanagedSettingsHandle); + new Thread(() => + { + lock (UnmanagedSettingsLock) + { + Marshal.StructureToPtr(settings, UnmanagedSettingsHandle, false); + unmanagedActionBefore?.Invoke(UnmanagedSettingsHandle); + DriverInterop.SetActiveSettings(UnmanagedSettingsHandle); + } + }).Start(); + } - public void SendToDriver() + public void SendToDriver(Action<IntPtr> unmanagedActionBefore = null) { - SetActive(this); + SetActive(this, unmanagedActionBefore); } - public void SendToDriverAndUpdate(ManagedAccel accel) + public void SendToDriverAndUpdate(ManagedAccel accel, Action betweenAccelAndWrite = null) { - SendToDriver(); - accel.UpdateFromSettings(UnmanagedSettingsHandle); + SendToDriver(settingsHandle => + { + accel.UpdateFromSettings(settingsHandle); + betweenAccelAndWrite?.Invoke(); + }); } public bool verify() diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs index 7f018cf..d7cf590 100644 --- a/grapher/Models/Serialized/SettingsManager.cs +++ b/grapher/Models/Serialized/SettingsManager.cs @@ -38,12 +38,10 @@ namespace grapher.Models.Serialized #region Methods - public void UpdateActiveSettings(DriverSettings settings) + public void UpdateActiveSettings(DriverSettings settings, Action afterAccelSettingsUpdate = null) { - try + settings.SendToDriverAndUpdate(ActiveAccel, () => { - settings.SendToDriverAndUpdate(ActiveAccel); - RawAccelSettings.AccelerationSettings = settings; RawAccelSettings.GUISettings = new GUISettings { @@ -53,23 +51,15 @@ namespace grapher.Models.Serialized }; RawAccelSettings.Save(); - } - catch (DriverWriteCDException) - { - Console.WriteLine("write on cooldown"); - } + + afterAccelSettingsUpdate?.Invoke(); + }); } public void UpdateActiveAccelFromFileSettings(DriverSettings settings) { - try - { - settings.SendToDriverAndUpdate(ActiveAccel); - } - catch (DriverWriteCDException) - { - Console.WriteLine("write on cd during file init"); - } + settings.SendToDriverAndUpdate(ActiveAccel); + DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI); PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate); AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup; |