summaryrefslogtreecommitdiff
path: root/grapher/Models/Serialized/SettingsManager.cs
blob: 848606d3d4b7db162dc0f24c2168ae87eedee1b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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();
            }
        }
    }
}