diff options
| author | a1xd <[email protected]> | 2021-01-14 12:27:42 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-01-14 12:27:42 -0500 |
| commit | 9ea8b4b94bba795eb5060b376baa8e5169e80272 (patch) | |
| tree | 493bfaeb2b59b7db452c52e9ec9713e8b8296510 /grapher/Models/Devices | |
| parent | Merge pull request #53 from termhn/patch-1 (diff) | |
| parent | filter raw input based on id (diff) | |
| download | rawaccel-9ea8b4b94bba795eb5060b376baa8e5169e80272.tar.xz rawaccel-9ea8b4b94bba795eb5060b376baa8e5169e80272.zip | |
Merge pull request #59 from aroidzap/apply-for-specific-device-gui
(GUI) Apply RawAccel only for specific device
Diffstat (limited to 'grapher/Models/Devices')
| -rw-r--r-- | grapher/Models/Devices/DeviceIDItem.cs | 73 | ||||
| -rw-r--r-- | grapher/Models/Devices/DeviceIDManager.cs | 86 |
2 files changed, 159 insertions, 0 deletions
diff --git a/grapher/Models/Devices/DeviceIDItem.cs b/grapher/Models/Devices/DeviceIDItem.cs new file mode 100644 index 0000000..63c2761 --- /dev/null +++ b/grapher/Models/Devices/DeviceIDItem.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Devices +{ + public class DeviceIDItem + { + public DeviceIDItem(string name, string id, DeviceIDManager manager) + { + Name = name; + ID = id; + Manager = manager; + DeviceIDMenuItem = new ToolStripMenuItem(); + DeviceIDMenuItem.Checked = false; + DeviceIDMenuItem.Text = MenuItemText(); + DeviceIDMenuItem.Click += OnClicked; + manager.DeviceIDsMenuItem.DropDownItems.Add(DeviceIDMenuItem); + } + + private ToolStripMenuItem DeviceIDMenuItem { get; } + + public string Name { get; } + + public string ID { get; } + + private DeviceIDManager Manager { get; } + + public void SetActivated() + { + DeviceIDMenuItem.Checked = true; + } + + public void SetDeactivated() + { + DeviceIDMenuItem.Checked = false; + } + + private string MenuItemText() => string.IsNullOrEmpty(ID) ? $"{Name}" : $"{Name}: {ID}"; + + private string DisconnectedText() => $"Disconnected: {ID}"; + + public void SetDisconnected() + { + DeviceIDMenuItem.ForeColor = Color.DarkGray; + DeviceIDMenuItem.Text = DisconnectedText(); + } + + public void OnClicked(object sender, EventArgs e) + { + Manager.SetActive(this); + } + + public override bool Equals(object obj) + { + return obj is DeviceIDItem item && + Name == item.Name && + ID == item.ID; + } + + public override int GetHashCode() + { + int hashCode = -1692744877; + hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name); + hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(ID); + return hashCode; + } + } +} diff --git a/grapher/Models/Devices/DeviceIDManager.cs b/grapher/Models/Devices/DeviceIDManager.cs new file mode 100644 index 0000000..c50cda8 --- /dev/null +++ b/grapher/Models/Devices/DeviceIDManager.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher.Models.Devices +{ + public class DeviceIDManager + { + public DeviceIDManager(ToolStripMenuItem deviceIDs) + { + DeviceIDsMenuItem = deviceIDs; + DeviceIDsMenuItem.Checked = false; + } + + public ToolStripMenuItem DeviceIDsMenuItem { get; } + + public string ID { get => SelectedDeviceID.ID; } + + public DeviceIDItem SelectedDeviceID { get; private set; } + + public Dictionary<string, DeviceIDItem> DeviceIDs { get; private set; } + + public static IEnumerable<(string, string)> GetDeviceIDs(string PNPClass = "Mouse") + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher(new SelectQuery("Win32_PnPEntity")); + + foreach (ManagementObject obj in searcher.Get()) + { + if (obj["PNPClass"] != null && obj["PNPClass"].ToString().Equals(PNPClass) && obj["DeviceID"] != null) + { + string name = obj["Name"].ToString(); + + string devInstanceID = obj["DeviceID"].ToString(); + string devID = devInstanceID.Remove(devInstanceID.LastIndexOf('\\')); + + yield return (name, devID); + } + } + } + + public void SetActive(DeviceIDItem deviceIDItem) + { + if (SelectedDeviceID != null) + { + SelectedDeviceID.SetDeactivated(); + } + + SelectedDeviceID = deviceIDItem; + SelectedDeviceID.SetActivated(); + } + + public void Update(string devID) + { + DeviceIDsMenuItem.DropDownItems.Clear(); + + bool found = string.IsNullOrEmpty(devID); + + var anyDevice = new DeviceIDItem("Any", string.Empty, this); + + if (found) SetActive(anyDevice); + + foreach (var device in GetDeviceIDs().Distinct()) + { + var deviceItem = new DeviceIDItem(device.Item1, device.Item2, this); + if (!found && deviceItem.ID.Equals(devID)) + { + SetActive(deviceItem); + found = true; + } + } + + if (!found) + { + var deviceItem = new DeviceIDItem(string.Empty, devID, this); + deviceItem.SetDisconnected(); + SetActive(deviceItem); + } + } + + } +} |