feat: Add vision controls, function menu, and custom alert dialogs

- Add Vision menu with Camera (QRCode) and Barcode (Keyence) controls
- Add Function menu with Manage, Log Viewer, and folder navigation
- Add quick action buttons (Manual, Light, Print, Cancel) to header
- Replace browser alert() with custom AlertDialog component
- Add MachineBridge methods for vision, lighting, folders, and manual operations
- Add WebSocketServer handlers for all new commands
- Add communication layer methods for frontend-backend integration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-25 23:39:38 +09:00
parent 6219c4c60e
commit 8bbd76e670
13 changed files with 1398 additions and 112 deletions

View File

@@ -233,6 +233,139 @@ namespace Project.WebUI
var response = new { type = "PROCESSED_DATA", data = Newtonsoft.Json.JsonConvert.DeserializeObject(dataJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CAMERA_CONNECT")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CameraConnect();
var response = new { type = "CAMERA_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CAMERA_DISCONNECT")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CameraDisconnect();
var response = new { type = "CAMERA_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CAMERA_GET_IMAGE")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CameraGetImage();
var response = new { type = "CAMERA_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CAMERA_LIVE_VIEW")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CameraLiveView();
var response = new { type = "CAMERA_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CAMERA_READ_TEST")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CameraReadTest();
var response = new { type = "CAMERA_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "KEYENCE_TRIGGER_ON")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.KeyenceTriggerOn();
var response = new { type = "KEYENCE_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "KEYENCE_TRIGGER_OFF")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.KeyenceTriggerOff();
var response = new { type = "KEYENCE_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "KEYENCE_GET_IMAGE")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.KeyenceGetImage();
var response = new { type = "KEYENCE_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "KEYENCE_SAVE_IMAGE")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.KeyenceSaveImage();
var response = new { type = "KEYENCE_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "TOGGLE_LIGHT")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.ToggleLight();
var response = new { type = "LIGHT_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_MANUAL_PRINT")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenManualPrint();
var response = new { type = "MANUAL_PRINT_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "CANCEL_JOB")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.CancelJob();
var response = new { type = "CANCEL_JOB_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_MANAGE")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenManage();
var response = new { type = "MANAGE_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_MANUAL")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenManual();
var response = new { type = "MANUAL_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_LOG_VIEWER")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenLogViewer();
var response = new { type = "LOG_VIEWER_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_PROGRAM_FOLDER")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenProgramFolder();
var response = new { type = "FOLDER_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_LOG_FOLDER")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenLogFolder();
var response = new { type = "FOLDER_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_SCREENSHOT_FOLDER")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenScreenshotFolder();
var response = new { type = "FOLDER_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
else if (type == "OPEN_SAVED_DATA_FOLDER")
{
var bridge = new MachineBridge(_mainForm);
string resultJson = bridge.OpenSavedDataFolder();
var response = new { type = "FOLDER_RESULT", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) };
await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response));
}
}
catch (Exception ex)
{