feat: Add node type-specific double-click actions
노드 타입별 더블클릭 액션 구현: UnifiedAGVCanvas.Mouse.cs: - MouseDoubleClick 핸들러 수정 - 노드 타입별 분기 처리 - HandleNormalNodeDoubleClick() 추가 - RFID 입력 InputBox 표시 - HandleLabelNodeDoubleClick() 추가 - 라벨 텍스트 입력 InputBox 표시 - HandleImageNodeDoubleClick() 추가 - ImageNodeDoubleClicked 이벤트 발생 UnifiedAGVCanvas.cs: - ImageNodeDoubleClicked 이벤트 정의 추가 MainForm.cs: - OnImageNodeDoubleClicked 이벤트 핸들러 추가 - 이미지 편집창(ImageEditorForm) 자동 표시 AGVNavigationCore.csproj: - Microsoft.VisualBasic 참조 추가 (InputBox 사용) 이제 노드 더블클릭 시: - 일반노드(Normal/Rotation/Docking/Charging): RFID 입력창 표시 - 라벨노드: 텍스트 입력창 표시 - 이미지노드: 이미지 편집창 자동 표시 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -56,11 +56,81 @@ namespace AGVNavigationCore.Controls
|
||||
|
||||
if (hitNode != null)
|
||||
{
|
||||
// 노드 속성 편집 (이벤트 발생)
|
||||
NodeSelected?.Invoke(this, hitNode);
|
||||
// 노드 타입별 더블클릭 액션
|
||||
switch (hitNode.Type)
|
||||
{
|
||||
case NodeType.Normal:
|
||||
case NodeType.Rotation:
|
||||
case NodeType.Docking:
|
||||
case NodeType.Charging:
|
||||
HandleNormalNodeDoubleClick(hitNode);
|
||||
break;
|
||||
|
||||
case NodeType.Label:
|
||||
HandleLabelNodeDoubleClick(hitNode);
|
||||
break;
|
||||
|
||||
case NodeType.Image:
|
||||
HandleImageNodeDoubleClick(hitNode);
|
||||
break;
|
||||
|
||||
default:
|
||||
// 기본 동작: 노드 선택 이벤트 발생
|
||||
NodeSelected?.Invoke(this, hitNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleNormalNodeDoubleClick(MapNode node)
|
||||
{
|
||||
// RFID 입력창 표시
|
||||
string currentRfid = node.RfidId ?? "";
|
||||
string newRfid = Microsoft.VisualBasic.Interaction.InputBox(
|
||||
$"노드 '{node.Name}'의 RFID를 입력하세요:",
|
||||
"RFID 설정",
|
||||
currentRfid);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newRfid) && newRfid != currentRfid)
|
||||
{
|
||||
node.RfidId = newRfid.Trim();
|
||||
MapChanged?.Invoke(this, EventArgs.Empty);
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
// 노드 선택 이벤트도 발생 (속성창 업데이트)
|
||||
NodeSelected?.Invoke(this, node);
|
||||
}
|
||||
|
||||
private void HandleLabelNodeDoubleClick(MapNode node)
|
||||
{
|
||||
// 라벨 텍스트 입력창 표시
|
||||
string currentText = node.Name ?? "새 라벨";
|
||||
string newText = Microsoft.VisualBasic.Interaction.InputBox(
|
||||
"라벨 텍스트를 입력하세요:",
|
||||
"라벨 편집",
|
||||
currentText);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newText) && newText != currentText)
|
||||
{
|
||||
node.Name = newText.Trim();
|
||||
MapChanged?.Invoke(this, EventArgs.Empty);
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
// 노드 선택 이벤트도 발생 (속성창 업데이트)
|
||||
NodeSelected?.Invoke(this, node);
|
||||
}
|
||||
|
||||
private void HandleImageNodeDoubleClick(MapNode node)
|
||||
{
|
||||
// 이미지 노드는 선택 이벤트만 발생 (MainForm에서 이미지 편집 버튼 활성화됨)
|
||||
NodeSelected?.Invoke(this, node);
|
||||
|
||||
// 이미지 편집 이벤트 발생 (MainForm에서 처리)
|
||||
ImageNodeDoubleClicked?.Invoke(this, node);
|
||||
}
|
||||
|
||||
private void UnifiedAGVCanvas_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
var worldPoint = ScreenToWorld(e.Location);
|
||||
|
||||
@@ -142,6 +142,7 @@ namespace AGVNavigationCore.Controls
|
||||
public event EventHandler<MapNode> NodeDeleted;
|
||||
public event EventHandler<MapNode> NodeMoved;
|
||||
public event EventHandler<(MapNode From, MapNode To)> ConnectionDeleted;
|
||||
public event EventHandler<MapNode> ImageNodeDoubleClicked;
|
||||
public event EventHandler MapChanged;
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user