diff --git a/MaiTouchComConnector.cs b/MaiTouchComConnector.cs
index 4e3dca0..26236a5 100644
--- a/MaiTouchComConnector.cs
+++ b/MaiTouchComConnector.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO.Ports;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.IO.Ports;
using System.Windows;
namespace WpfMaiTouchEmulator;
@@ -88,22 +82,17 @@ internal class MaiTouchComConnector
void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
- string recievedData = serialPort.ReadExisting();
+ var recievedData = serialPort.ReadExisting();
var commands = recievedData.Split(new[] { '}' }, StringSplitOptions.RemoveEmptyEntries);
- foreach (string command in commands)
+ foreach (var command in commands)
{
- string cleanedCommand = command.TrimStart('{');
- // Implement your logic to process the received data here
+ var cleanedCommand = command.TrimStart('{');
Console.WriteLine($"Received data: {cleanedCommand}");
OnDataRecieved(cleanedCommand);
-
- // Check if the received packet is a STAT packet
if (cleanedCommand == "STAT")
{
- // Simulate entering active mode
isActiveMode = true;
- Console.WriteLine("Entered Active Mode");
}
else if (cleanedCommand == "RSET")
{
@@ -115,12 +104,11 @@ internal class MaiTouchComConnector
}
else if (cleanedCommand[2] == 'r' || cleanedCommand[2] == 'k')
{
- char leftOrRight = cleanedCommand[0];
- char sensor = cleanedCommand[1];
- char ratio = cleanedCommand[3];
+ var leftOrRight = cleanedCommand[0];
+ var sensor = cleanedCommand[1];
+ var ratio = cleanedCommand[3];
- // Create the new string in the specified format
- string newString = $"({leftOrRight}{sensor}{cleanedCommand[2]}{ratio})";
+ var newString = $"({leftOrRight}{sensor}{cleanedCommand[2]}{ratio})";
serialPort.Write(newString);
OnDataSent(newString);
}
diff --git a/MaiTouchSensorButtonStateManager.cs b/MaiTouchSensorButtonStateManager.cs
index 66e427e..05c4917 100644
--- a/MaiTouchSensorButtonStateManager.cs
+++ b/MaiTouchSensorButtonStateManager.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
+using System.Windows;
using System.Windows.Controls;
namespace WpfMaiTouchEmulator;
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 1dff679..0ede65e 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -1,19 +1,8 @@
using System.Diagnostics;
-using System.Text;
using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace WpfMaiTouchEmulator;
-///
-/// Interaction logic for MainWindow.xaml
-///
+
public partial class MainWindow : Window
{
private readonly MaiTouchSensorButtonStateManager buttonState;
diff --git a/TouchPanel.xaml.cs b/TouchPanel.xaml.cs
index 8a01f1a..6d8ac01 100644
--- a/TouchPanel.xaml.cs
+++ b/TouchPanel.xaml.cs
@@ -1,25 +1,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.Runtime.InteropServices;
using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
-using System.Windows.Media.Imaging; // For BitmapImage
-using System.IO;
-using System.Windows.Interop; // For Imaging.CreateBitmapSourceFromHBitmap
-using System.Runtime.InteropServices;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.Windows.Controls.Primitives; // For Marshal
namespace WpfMaiTouchEmulator;
///
@@ -30,20 +12,25 @@ public partial class TouchPanel : Window
internal Action onTouch;
internal Action onRelease;
- [DllImport("user32.dll")]
- public static extern int SetWindowLong(IntPtr window, int index, int value);
+ private readonly Dictionary activeTouches = [];
+ private readonly TouchPanelPositionManager _positionManager;
- [DllImport("user32.dll")]
- public static extern int GetWindowLong(IntPtr window, int index);
+ private enum ResizeDirection
+ {
+ BottomRight = 8,
+ }
- public const int GWL_EXSTYLE = -20;
- public const int WS_EX_TRANSPARENT = 0x00000020;
- public const int WS_EX_LAYERED = 0x00080000;
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]
+ private static extern bool ReleaseCapture();
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]
+ private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public TouchPanel()
{
InitializeComponent();
- this.Topmost = true;
+ Topmost = true;
_positionManager = new TouchPanelPositionManager();
}
@@ -60,12 +47,6 @@ public partial class TouchPanel : Window
}
}
- private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- // This allows the entire window to be draggable
- DragMove();
- }
-
private void DragBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// This event is for the draggable bar, it calls DragMove to move the window
@@ -80,17 +61,6 @@ public partial class TouchPanel : Window
}
}
- private enum ResizeDirection
- {
- BottomRight = 8,
- }
-
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- private static extern bool ReleaseCapture();
-
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
-
private void ResizeWindow(ResizeDirection direction)
{
ReleaseCapture();
@@ -100,14 +70,10 @@ public partial class TouchPanel : Window
IntPtr.Zero);
}
- private Dictionary activeTouches = new Dictionary();
- private TouchPanelPositionManager _positionManager;
-
private void Element_TouchDown(object sender, TouchEventArgs e)
{
// Cast the sender to a Border to ensure it's the correct element type.
- var element = sender as System.Windows.Controls.Image;
- if (element != null)
+ if (sender is System.Windows.Controls.Image element)
{
// Highlight the element and add it to the active touches tracking.
HighlightElement(element, true);
@@ -125,7 +91,7 @@ public partial class TouchPanel : Window
if (hitTestResult != null && hitTestResult.VisualHit is System.Windows.Controls.Image newElement)
{
// If this touch point is already tracking another element, unhighlight the previous one.
- if (activeTouches.TryGetValue(e.TouchDevice.Id, out System.Windows.Controls.Image previousElement) && previousElement != newElement)
+ if (activeTouches.TryGetValue(e.TouchDevice.Id, out var previousElement) && previousElement != newElement)
{
HighlightElement(previousElement, false);
onRelease((TouchValue)previousElement.Tag);
@@ -149,7 +115,7 @@ public partial class TouchPanel : Window
private void Element_TouchUp(object sender, TouchEventArgs e)
{
// When touch is lifted, unhighlight the associated element and remove it from tracking.
- if (activeTouches.TryGetValue(e.TouchDevice.Id, out System.Windows.Controls.Image element))
+ if (activeTouches.TryGetValue(e.TouchDevice.Id, out var element))
{
HighlightElement(element, false);
onRelease((TouchValue)element.Tag);
@@ -159,10 +125,10 @@ public partial class TouchPanel : Window
e.Handled = true;
}
- private bool IsTouchInsideWindow(System.Windows.Point touchPoint)
+ private bool IsTouchInsideWindow(Point touchPoint)
{
// Define the window's bounds
- var windowBounds = new Rect(0, 0, this.ActualWidth, this.ActualHeight);
+ var windowBounds = new Rect(0, 0, ActualWidth, ActualHeight);
// Check if the touch point is within the window's bounds
return windowBounds.Contains(touchPoint);
diff --git a/TouchPanelPositionManager.cs b/TouchPanelPositionManager.cs
index 974d9d9..e044c67 100644
--- a/TouchPanelPositionManager.cs
+++ b/TouchPanelPositionManager.cs
@@ -1,49 +1,42 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
+using System.Runtime.InteropServices;
using System.Windows;
-namespace WpfMaiTouchEmulator
+namespace WpfMaiTouchEmulator;
+
+class TouchPanelPositionManager
{
- class TouchPanelPositionManager
+ [DllImport("user32.dll", SetLastError = true)]
+ static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct RECT
{
- [DllImport("user32.dll", SetLastError = true)]
- static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);
+ public int Left;
+ public int Top;
+ public int Right;
+ public int Bottom;
+ }
- [DllImport("user32.dll", SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
-
- [StructLayout(LayoutKind.Sequential)]
- public struct RECT
+ public Rect? GetSinMaiWindowPosition()
+ {
+ var hWnd = FindWindow(null, "Sinmai");
+ if (hWnd != IntPtr.Zero)
{
- public int Left;
- public int Top;
- public int Right;
- public int Bottom;
- }
-
- public Rect? GetSinMaiWindowPosition()
- {
- // Replace "OtherAppWindowName" with the window name (title) of the other application
- IntPtr hWnd = FindWindow(null, "Sinmai");
- if (hWnd != IntPtr.Zero)
+ RECT rect;
+ if (GetWindowRect(hWnd, out rect))
{
- RECT rect;
- if (GetWindowRect(hWnd, out rect))
- {
- // Calculate the desired size and position based on the other application's window
- int width = Convert.ToInt32((rect.Right - rect.Left));
- int height = width;
- int left = rect.Left + ((rect.Right - rect.Left) - width) / 2; // Center horizontally
- int top = rect.Bottom - height;
- return new Rect(left, top, width, height);
- }
+ // Calculate the desired size and position based on the other application's window
+ var width = Convert.ToInt32((rect.Right - rect.Left));
+ var height = width;
+ var left = rect.Left + ((rect.Right - rect.Left) - width) / 2; // Center horizontally
+ var top = rect.Bottom - height;
+ return new Rect(left, top, width, height);
}
- return null;
}
+ return null;
}
}
diff --git a/VirtualComPortManager.cs b/VirtualComPortManager.cs
index 0d3ae1d..55c871d 100644
--- a/VirtualComPortManager.cs
+++ b/VirtualComPortManager.cs
@@ -1,64 +1,61 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
+using System.Diagnostics;
using System.Text;
-using System.Threading.Tasks;
-namespace WpfMaiTouchEmulator
+namespace WpfMaiTouchEmulator;
+
+internal class VirtualComPortManager
{
- class VirtualComPortManager
+ public Task CheckInstalledPortsAsync()
{
- public Task CheckInstalledPortsAsync()
- {
- return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"list");
- }
+ return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"list");
+ }
- public Task InstallComPort()
- {
- return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"install PortName=COM3 PortName=COM23");
- }
+ public Task InstallComPort()
+ {
+ return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"install PortName=COM3 PortName=COM23");
+ }
- public Task UninstallVirtualPorts()
- {
- return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"uninstall");
- }
+ public Task UninstallVirtualPorts()
+ {
+ return ExecuteCommandAsync("C:\\Program Files (x86)\\com0com\\setupc.exe", $"uninstall");
+ }
- private async Task ExecuteCommandAsync(string command, string arguments)
+ private async Task ExecuteCommandAsync(string command, string arguments)
+ {
+ var processStartInfo = new ProcessStartInfo
{
- var processStartInfo = new ProcessStartInfo
+ FileName = command,
+ Arguments = arguments,
+ UseShellExecute = false,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ CreateNoWindow = true,
+ WorkingDirectory = "C:\\Program Files (x86)\\com0com"
+ };
+
+ var outputBuilder = new StringBuilder();
+ using var process = new Process { StartInfo = processStartInfo };
+ process.OutputDataReceived += (sender, args) =>
+ {
+ if (args.Data != null)
{
- FileName = command,
- Arguments = arguments,
- UseShellExecute = false,
- RedirectStandardOutput = true,
- RedirectStandardError = true,
- CreateNoWindow = true,
- WorkingDirectory = "C:\\Program Files (x86)\\com0com"
- };
-
- var outputBuilder = new StringBuilder();
- using (var process = new Process { StartInfo = processStartInfo })
- {
- process.OutputDataReceived += (sender, args) =>
- {
- if (args.Data != null)
- outputBuilder.AppendLine(args.Data);
- };
- process.ErrorDataReceived += (sender, args) =>
- {
- if (args.Data != null)
- outputBuilder.AppendLine(args.Data);
- };
-
- process.Start();
- process.BeginOutputReadLine();
- process.BeginErrorReadLine();
-
- await process.WaitForExitAsync();
-
- return outputBuilder.ToString();
+ outputBuilder.AppendLine(args.Data);
}
- }
+ };
+ process.ErrorDataReceived += (sender, args) =>
+ {
+ if (args.Data != null)
+ {
+ outputBuilder.AppendLine(args.Data);
+ }
+ };
+
+ process.Start();
+ process.BeginOutputReadLine();
+ process.BeginErrorReadLine();
+
+ await process.WaitForExitAsync();
+
+ return outputBuilder.ToString();
}
}
diff --git a/VisualTreeHelperExtensions.cs b/VisualTreeHelperExtensions.cs
index ab34933..52164e3 100644
--- a/VisualTreeHelperExtensions.cs
+++ b/VisualTreeHelperExtensions.cs
@@ -1,6 +1,4 @@
-using System.Collections.Generic;
-using System.Windows;
-using System.Windows.Controls;
+using System.Windows;
using System.Windows.Media;
public static class VisualTreeHelperExtensions
@@ -11,10 +9,10 @@ public static class VisualTreeHelperExtensions
var images = new List();
// Recursive search of the visual tree to find all Image controls
- for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
+ for (var i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
- if (child != null && child is Image)
+ if (child is not null and Image)
{
images.Add((Image)child);
}