패널이 선택 단위 — 자식을 집어도 묶음째 움직인다
패널로 감싸 놓고 정작 자식을 클릭하면 자식만 잡혀서 그 하나만 끌려갔다. 그룹처럼 안 움직인다. 이제 컨트롤을 클릭하면 최상위 컨테이너까지 거슬러 올라가 그것을 고른다. 패널이 잡히므로 끌면 자식들이 부모를 따라 함께 움직이고, 자식의 상대좌표는 그대로 남는다. 마퀴로 자식 하나가 걸려도 같은 규칙이라 선택 단위가 한 가지로 유지된다. 안으로 들어가려면 더블클릭한다. 한 번 들어가면 그 자식이 선택된 상태이므로 다시 더블클릭하면 예전처럼 글자 편집이다. 최상위 컨트롤은 들어갈 곳이 없으니 첫 더블클릭이 바로 글자 편집으로 간다(기존 동작 그대로). 이 규칙은 그룹용 패널뿐 아니라 사용자가 직접 만든 패널에도 똑같이 걸린다. 둘을 구분할 방법이 없기도 하고, 구분하면 같은 모양이 다르게 동작해 더 헷갈린다. 디자인 도구의 관례(프레임을 클릭하면 프레임, 들어가려면 더블클릭)와도 맞는다. --edit-smoke 에 3건 추가: 자식을 집으면 패널이 잡히는가, 끌면 패널째 움직이고 자식 상대좌표가 그대로인가, 더블클릭이 안으로 들어가는가. 게이트: 테스트 267/267, --edit-smoke 0실패, --query-popup 17/17, --maxrect 10/10, --db-smoke 3000 diff 0·예외 0, --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 동일. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0e30aa39c6
commit
893d81a40e
@@ -1849,9 +1849,31 @@ public sealed class DesignerViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이 컨트롤을 클릭했을 때 실제로 잡히는 것 — 최상위 컨테이너까지 거슬러 올라간다.
|
||||
/// 그룹이 진짜 패널이 되면서, 자식을 집으면 그 하나만 끌려가던 문제를 여기서 막는다.
|
||||
/// </summary>
|
||||
public ControlViewModel SelectionUnitOf(ControlViewModel viewModel)
|
||||
{
|
||||
var unit = viewModel;
|
||||
while (unit.Parent is { } parent)
|
||||
{
|
||||
unit = parent;
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
|
||||
/// <summary>그룹 동료 확장 — GroupId 가 같은 페이지 내 컨트롤 전체(클릭 선택이 그룹 단위가 되도록)</summary>
|
||||
public List<ControlViewModel> GroupMatesOf(ControlViewModel viewModel)
|
||||
{
|
||||
// 패널 안의 것은 패널이 곧 선택 단위다 — 자식 하나를 집어도 묶음 전체가 함께 움직여야 한다.
|
||||
// 안으로 들어가려면 더블클릭한다(InteractionController 가 처리).
|
||||
var unit = SelectionUnitOf(viewModel);
|
||||
if (!ReferenceEquals(unit, viewModel))
|
||||
{
|
||||
return new List<ControlViewModel> { unit };
|
||||
}
|
||||
|
||||
if (viewModel.Model.GroupId is not { } groupId)
|
||||
{
|
||||
return new List<ControlViewModel> { viewModel };
|
||||
|
||||
Reference in New Issue
Block a user