Files
HawkeyeVision/VisionBuilder.UI.IOCommander.Windows/IOCommanderVirtualInput.cs
meelstorm 87c1145744 1.0.4
2025-09-24 16:27:07 +02:00

97 lines
2.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VisionBuilder.UI.Common;
using VisionBuilder.UI.IOCommander.Interfaces;
namespace VisionBuilder.UI.IOCommander.Windows
{
public partial class IOCommanderVirtualInput : Form, IIOCommander
{
private CheckBox[] _checkBoxes;
public IOCommanderVirtualInput()
{
InitializeComponent();
InitializeCheckboxes();
}
public BitArray PinState { get; set; } = new BitArray(10);
public event Action<int, bool>? OnPinChanged = delegate { };
public void SetPins(int pin, bool state)
{
// This is a dummy function as per requirement
}
private void InitializeCheckboxes()
{
// Set form properties
this.Text = "IO Commander Virtual Input";
this.ClientSize = new Size(200, 280);
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.StartPosition = FormStartPosition.Manual;
this.Location = new Point(350, 50); // Set a fixed position for the form
// Create a panel to contain checkboxes with scrolling if needed
Panel panel = new Panel
{
Dock = DockStyle.Fill,
AutoScroll = true
};
this.Controls.Add(panel);
// Initialize checkboxes
_checkBoxes = new CheckBox[10];
for (int i = 0; i < 10; i++)
{
int pinNumber = i + 1; // Pins are 1-indexed (1-10)
_checkBoxes[i] = new CheckBox
{
Text = pinNumber.ToString(),
Location = new Point(20, 20 + (i * 22)),
Size = new Size(150, 20),
Tag = pinNumber, // Store the pin number in Tag for easy reference
};
// Add event handler
_checkBoxes[i].CheckedChanged += CheckBox_CheckedChanged;
panel.Controls.Add(_checkBoxes[i]);
}
}
private void CheckBox_CheckedChanged(object? sender, EventArgs e)
{
if (sender is CheckBox checkBox)
{
int pin = (int)checkBox.Tag;
bool state = checkBox.Checked;
// Update the BitArray (convert 1-based pin to 0-based index)
PinState.Set(pin - 1, state);
// Trigger the event
OnPinChanged?.Invoke(pin, state);
}
}
protected override void OnShown(EventArgs e)
{
TopMost= true;
Focus();
TopMost = true;
}
}
}