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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Linq;
namespace grapher.Models.Serialized
{
[Serializable]
public class RawAccelSettings
{
#region Fields
public static readonly string ExecutingDirectory = AppDomain.CurrentDomain.BaseDirectory;
public static readonly string DefaultSettingsFile = Path.Combine(ExecutingDirectory, Constants.DefaultSettingsFileName);
public static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Ignore,
};
#endregion Fields
#region Constructors
public RawAccelSettings() { }
public RawAccelSettings(
DriverSettings accelSettings,
GUISettings guiSettings)
{
AccelerationSettings = accelSettings;
GUISettings = guiSettings;
}
#endregion Constructors
#region Properties
[JsonProperty(Required = Required.Always)]
public GUISettings GUISettings { get; set; }
[JsonProperty(DriverSettings.Key, Required = Required.Always)]
public DriverSettings AccelerationSettings { get; set; }
#endregion Properties
#region Methods
public static RawAccelSettings Load(Func<GUISettings> DefaultGUISettingsSupplier)
{
return Load(DefaultSettingsFile, DefaultGUISettingsSupplier);
}
public static RawAccelSettings Load(string file, Func<GUISettings> DefaultGUISettingsSupplier)
{
try
{
RawAccelSettings settings = null;
JObject settingsJObject = JObject.Parse(File.ReadAllText(file));
if (settingsJObject.ContainsKey(DriverSettings.Key))
{
settings = settingsJObject.ToObject<RawAccelSettings>(JsonSerializer.Create(SerializerSettings));
}
else
{
settings = new RawAccelSettings
{
AccelerationSettings = settingsJObject.ToObject<DriverSettings>(),
GUISettings = DefaultGUISettingsSupplier()
};
}
if (settings is null || settings.AccelerationSettings is null)
{
throw new JsonException($"{file} contains invalid JSON");
}
return settings;
}
catch (FileNotFoundException e)
{
throw new FileNotFoundException($"Settings file does not exist at {file}", e);
}
catch (JsonException e)
{
throw new JsonException($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
}
}
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)
{
JObject thisJO = JObject.FromObject(this);
AddComments(thisJO);
File.WriteAllText(file, thisJO.ToString(Formatting.Indented));
}
private void AddComments(JObject thisJO)
{
string modes = string.Join(" | ", Enum.GetNames(typeof(AccelMode)));
((JObject)thisJO[DriverSettings.Key])
.AddFirst(new JProperty("### Mode Types ###", modes));
}
public bool IsDefaultEquivalent()
{
return IsDefaultEquivalent(AccelerationSettings);
}
public static bool IsDefaultEquivalent(DriverSettings accelSettings)
{
bool wholeOrNoY = accelSettings.combineMagnitudes ||
accelSettings.modes.y == AccelMode.noaccel;
return string.IsNullOrEmpty(accelSettings.deviceID) &&
accelSettings.sensitivity.x == 1 &&
accelSettings.sensitivity.y == 1 &&
accelSettings.directionalMultipliers.x <= 0 &&
accelSettings.directionalMultipliers.y <= 0 &&
accelSettings.rotation == 0 &&
accelSettings.snap == 0 &&
accelSettings.modes.x == AccelMode.noaccel &&
wholeOrNoY;
}
#endregion Methods
}
}
|