feat: align legacy operator and playout behavior
This commit is contained in:
@@ -86,10 +86,10 @@ fixed/industry/comparison 트리의 원본 double-click과 독립적으로 처
|
||||
| `tabControl1_SelectedIndexChanged` | 탭별 최초 데이터 조회 | 10개 identity별 C# activation gate; 최초 진입 1회 load, 재진입 snapshot 유지 |
|
||||
| 탭 drag 이벤트 | 10개 탭 표시 순서 교환 | dragover 대상 진입 시 identity와 예상 위치를 C#이 검증해 교환; 중복 전달은 no-op, active tab·playlist 불변 |
|
||||
| 검색 버튼/Enter | 종목 검색 | 원본 KOSPI→KOSDAQ→NXT 순서와 마지막 이름 일치 규칙 유지 |
|
||||
| 컷 click/double-click/drag | 원본 31컷 선택·추가 | plain/Ctrl/Shift/Ctrl+Shift와 원본 double-click 판정, batch 추가 |
|
||||
| playlist click/key/buttons/drag | 선택, enabled, 이동, 삭제, 다중 선택 행 이동 | 선택된 행은 원래 순서를 보존한 한 블록으로 임의 위치에 이동; C# playlist authority와 PREPARED/PROGRAM/pending/unknown mutation 차단 유지 |
|
||||
| 컷 click/double-click/key/drag | 원본 런타임 컷 선택·추가 | 최대 50 물리행, pointer double-click, Arrow/Home/End/Space와 Ctrl/Shift selection mark, batch 추가 |
|
||||
| playlist click/key/buttons/drag | F8 후보, 삭제 선택, enabled, 이동, 삭제, 단일 행 drag | F8 후보·PROGRAM·DEL 집합·Shift anchor를 분리하고 drag는 실제 source 한 행만 이동; 송출 mutation 차단 유지 |
|
||||
| F2/F3 | 배경 선택·없음 | trusted sibling background root만 허용; 누락·reparse·escape fail closed |
|
||||
| F8 | TAKE IN | idle이면 내부 PREPARE → TAKE IN을 한 번에 실행 |
|
||||
| F8 | 선택 후보 TAKE IN | IDLE/PREPARED/PROGRAM에서 그 시점의 후보를 새 PREPARE → TAKE IN으로 실행; PROGRAM·후보·DEL 집합·Shift anchor는 독립 |
|
||||
| NEXT | Page NEXT 또는 다음 행 | 같은 scene PageN 여부를 C#이 판정 |
|
||||
| Escape | TAKE OUT | modal이 없을 때만 StopAll 기반 TAKE OUT intent |
|
||||
| FormClosing | 종료 확인 | 기본 취소 확인창; 자동 TAKE OUT/반대 명령 없음 |
|
||||
@@ -99,9 +99,10 @@ fixed/industry/comparison 트리의 원본 double-click과 독립적으로 처
|
||||
FarPoint UI는 Web table/list로 표현한다. 다음 의미는 원본과 같이 유지한다.
|
||||
|
||||
- plain/Ctrl/Shift/Ctrl+Shift 선택과 현재 행
|
||||
- 첫 행은 자동 F8 후보지만 실제 클릭 전에는 DEL 선택이 아니며, F8/Home/End도 기존 DEL 집합과 Shift anchor를 덮어쓰지 않음
|
||||
- column header 정렬과 현재 표시 순서
|
||||
- 위/아래 이동, 선택/전체 삭제와 enabled 토글
|
||||
- playlist의 비연속 다중 선택을 한 블록으로 유지하는 행 drag와 임의 before/after drop
|
||||
- playlist의 실제 drag source 한 행을 이동하는 임의 before/after drop; 비연속 Ctrl/Shift 집합은 삭제 선택으로만 사용
|
||||
- UC6/EList 추천 행의 opaque `rowId` 기반 drag 재정렬
|
||||
- single-click과 double-click을 컨트롤별로 구분
|
||||
- 부모 section 전체 추가는 모든 자식을 먼저 materialize한 뒤 한 번에 commit
|
||||
@@ -117,7 +118,7 @@ Theme 결과 double-click은 원본의 5행 현재가 경로를 사용한다. PL
|
||||
|
||||
| 원본 동작 | Web 입력 | C# 권위와 중복 안전 |
|
||||
|---|---|---|
|
||||
| `PlayList_DragDrop/DragOver` | 내부 custom MIME와 opaque source/target `rowId`, before/after | source가 선택 행이면 현재 선택 전체를 표시 순서대로 이동한다. 체크박스에서 시작한 drag는 거부하고 PREPARED/PROGRAM/pending/unknown에서는 변경하지 않는다. |
|
||||
| FarPoint `AllowRowMove` | 내부 custom MIME와 opaque source/target `rowId`, before/after | 실제로 끌어 잡은 source 한 행만 이동한다. 수동 Ctrl/Shift 삭제 선택을 다중 행 drag로 확대하지 않으며, 체크박스에서 시작한 drag와 PREPARED/PROGRAM/pending/unknown 변경을 거부한다. |
|
||||
| `tab_DragOver/MouseDown/Move/Up` | drop을 기다리지 않고 dragover로 `hover-swap-tabs` 전송 | C# 탭 identity와 `expectedSourceIndex/expectedTargetIndex`가 현재 순서와 일치할 때만 교환하므로 같은 메시지의 중복 전달이 순서를 되돌리지 않는다. |
|
||||
| UC6 `FpSpread2.AllowDragDrop` | ThemeA/EList 편집행의 내부 custom MIME와 opaque `rowId` | 워크플로가 임의 before/after 위치를 계산한다. 존재하지 않는 ID, 같은 행, 추가 payload 필드는 strict bridge에서 거부하거나 no-op 처리한다. |
|
||||
|
||||
@@ -129,7 +130,7 @@ reorder와 cut append가 함께 발생하지 않는다.
|
||||
체크박스 origin도 브라우저 동작을 반영해 보강했다. Chromium의 `dragstart.target`은 실제
|
||||
pointer가 체크박스에서 시작했어도 draggable 조상 행일 수 있다. pointerdown 때 checkbox
|
||||
origin row를 기억해 이어지는 dragstart를 거부하고 pointerup/pointercancel/dragend에서 지운다.
|
||||
회귀 테스트는 이 target 형태, 다중선택 보존, row MIME의 조상 무시, 외부 text 거부와 exact
|
||||
회귀 테스트는 이 target 형태, 단일 source 행 이동, row MIME의 조상 무시, 외부 text 거부와 exact
|
||||
selected-cut token의 1회 처리를 DOM event 순서로 재현한다.
|
||||
|
||||
### ThemeA 이름 중복확인
|
||||
@@ -183,7 +184,9 @@ gate 때문에 `DryRun`으로 남았고 Tornado TCP 연결과 Network Monitoring
|
||||
|
||||
- `삼성` 검색 결과 **63개**, `삼성출판사` 선택, 선택한 컷 3개를 한 번의 drop으로
|
||||
playlist 3행에 추가
|
||||
- playlist multi-row block reorder와 enabled 체크박스 origin drag 차단
|
||||
- 당시 package의 playlist multi-row block reorder와 enabled 체크박스 origin drag 차단.
|
||||
block reorder는 이후 원본 재감사에서 source 단일 행 이동으로 교정됐으므로 현재 코드의
|
||||
단일 행 drag package 실측으로 간주하지 않음
|
||||
- mouse release 전에 dragover로 시장 탭 순서 교환
|
||||
- EList 추천행 **5개** drag reorder. 수량 입력칸에서 시작한 실제 마우스 drag는 순서를
|
||||
바꾸지 않고, 행의 비입력 영역에서 시작한 drag만 순서를 바꾸는 것을 확인
|
||||
@@ -203,9 +206,11 @@ Live 연결/해제 경로만 검증하며 scene/PGM 방송 송출 성공을 뜻
|
||||
| `s5077` | 6 | 6종목 테마 경로 |
|
||||
| `s5088` | 12 | 12종목 테마 경로 |
|
||||
|
||||
`pageCount = min(20, ceil(itemCount / pageSize))`를 사용한다. 0행, 정확한 경계,
|
||||
마지막 부분 페이지, 20페이지 cap, 21페이지 요청 거부, 같은 scene의 `GetPlayingScene`
|
||||
Page NEXT와 다음 enabled playlist 항목 NEXT를 자동 테스트로 비교한다.
|
||||
행을 만들 때 `pageCount = min(20, ceil(itemCount / pageSize))`를 사용하고, 송출을
|
||||
시작할 때 operator row의 `current/total` suffix를 해당 on-air cycle 동안 고정한다.
|
||||
column 3이 정확히 `5단 표그래프`, `6종목 현재가`, `12종목 현재가`인 행만 Page NEXT를
|
||||
허용한다. 0행, 정확한 경계, 마지막 부분 페이지, 20페이지 cap, 21페이지 요청 거부,
|
||||
retained on-air scene Page NEXT와 다음 enabled playlist 항목 NEXT를 자동 테스트로 비교한다.
|
||||
|
||||
## 개발 DB write 증적
|
||||
|
||||
|
||||
Reference in New Issue
Block a user