Skip to content

Windows UI redesign — Comparator presentation epic: three focused jobs #114

Open
0 of 3 issues completed

Description

@chammoru

한국어 — 작은 작업별로 진행하는 작업 묶음

이 이슈는 관련 작업을 묶는 관리용 상위 이슈입니다. 한 번에 구현하거나 한꺼번에 설계 승인하는 단일 작업이 아닙니다. 아래 개별 이슈를 각각 검토·완료합니다. 실행 범위와 순서는 개별 이슈의 질문·좁은 범위·선행 작업을 기준으로 정합니다. 아래에 남겨 둔 기존 단계 전체 설계는 참고 자료입니다.

개별 작업 화면·논의 질문·완료 조건
Comparator 입력 역할과 파일명 명확화 #129
실제 측정 범위·값·계산 상태 표시 #130
시퀀스 분석 그래프를 맥락에 맞게 정리 #131

화면 맥락

제안 화면

구현된 앱 화면이 아닌 UI 제안입니다. 그림의 모든 주변 요소가 아니라 현재 논의 중인 개별 작업의 범위만 구현합니다.

진행 상태: 개별 작업 논의 대기. 연결된 작업 모두에 실제 구현·검증 증거가 있을 때까지 이 상위 이슈를 열어 둡니다. 전체 계획의 첫 논의는 #117의 글꼴입니다. 다음 작업과 릴리즈를 자동으로 진행하지 않습니다.


시각적 설명과 논의

이 작업 묶음은 새로운 다중 행 배치가 아니라 비교 의미를 읽기 쉽게 만드는 것입니다. 실제 분석 대상은 A와 B입니다. C와 D는 보기 전용이며 그 측정값까지 계산한 것처럼 보여서는 안 됩니다.

아래 도식은 구조와 동작을 설명합니다. 정확한 픽셀 배치·글꼴 렌더링이나 구현된 Windows 앱 스크린샷이 아닙니다.

flowchart TD
  A["A: 기준"] --> METRIC["A ↔ B 분석<br/>현재 프레임 / ROI / 시퀀스 평균<br/>실제 PSNR · SSIM · LPIPS 값"]
  B["B: 비교 대상"] --> METRIC
  C["C: 보기 전용"] --> VIEW["육안 검사할 추가 이미지<br/>C/D 측정을 계산한 것처럼 표시하지 않음"]
  D["D: 보기 전용"] --> VIEW
  METRIC --> STATE["준비 / 계산 / 완료 / 취소 / 오류<br/>이전 값·0을 새 결과로 표시하지 않음"]
  STILL["정지 이미지 비교"] --> COMPACT["간결한 분석; 타임라인 접힘"]
  SEQUENCE["시퀀스 비교"] --> TEMPORAL["프레임 조작·의미 있는 시간 그래프"]
Loading

기존 단계 전체의 논의 질문 — 참고

  • A/B 파일과 숫자가 나타내는 영역·프레임을 바로 알 수 있나요?
  • 정지 이미지에서는 시간 그래프를 접고 시퀀스에서 필요할 때만 열까요?
  • 이미지 영역·파일명·측정값 사이의 균형이 적절한가요?

참고 자료 상태: 승인은 위의 개별 작업 질문을 기준으로 합니다. 단계 전체의 참고 내용을 한 번에 구현하는 작업으로 취급하지 않습니다.


상위 이슈·의존성

상위: #110. #111, #112, #113에 의존합니다. 선행 작업을 완료·검증한 뒤 진행합니다.

목표

비교 엔진이나 패널 배치 모델은 바꾸지 않고 입력 역할·측정 범위·분석 상태를 읽기 쉽게 만듭니다.

구현 범위

  • Comparator에 공통 글꼴·표면·간격을 적용합니다. 같은 크기의 A/B 패널, 1 DIP 구분선, 최소 48 DIP 입력 헤더, 28 DIP 역할 표식, 전체 파일명 접근을 제공합니다.
  • A는 Reference(기준), B는 Compared(비교 대상)로 표시합니다. 실제 상태가 동기화된 경우에만 동기화를 표시합니다.
  • 최소 72 DIP 분석 줄에 A ↔ B와 실제 현재 프레임/ROI/시퀀스 평균 범위를 표시합니다. 측정값은 16 DIP 고정폭, 채널·단위 레이블은 12 DIP입니다.
  • 실제 PSNR dB·채널 출력과 무한대·계산 불가 상황을 유지합니다. SSIM/LPIPS도 실제 측정값이며 만들어낸 품질 백분율이 아닙니다.
  • 준비·대기·계산·오래된 결과·취소·오류·완료를 구분합니다. 0이나 이전 프레임 값을 새 계산 완료 결과로 표시하지 않습니다. 전체 작업량을 모르면 진행 백분율을 만들지 않습니다.
  • 정지 이미지에서는 시간 그래프를 처음에 숨깁니다. 시퀀스에는 프레임·진행 조작과 접을 수 있는 그래프(초기 약 144 DIP)를 제공합니다. 단위·프레임/시간 축·현재 위치·미계산 구간을 표시합니다.
  • 현재 측정·차이 스캔은 첫 두 패널에만 적용합니다. C/D는 View only(보기 전용)로 표시하고 이미지 렌더링을 유지합니다.
  • #107의 같은 폴더 다중 파일 시퀀스 탐지 성능 개선을 유지합니다. 임의 비교 쌍·다중 행·새 알고리즘·디코더 재작성은 이 단계에서 하지 않습니다.

완료 조건

  • 표시 역할·프레임/ROI/평균 범위·단위·동기화·대기/오류 상태가 실제 엔진과 일치합니다.
  • 측정 대상은 A/B만으로 표시합니다. C/D를 어둡게 하거나 분석된 입력으로 표시하지 않습니다.
  • 정지 이미지 비교에는 불필요한 시퀀스 UI가 없고 시퀀스 탐색·그래프 범위는 일치합니다.
  • LPIPS 준비·취소·실패, 크기 불일치, 미완료 스캔, 무한대·계산 불가를 정확하게 처리합니다.
  • 확대·이동·ROI·픽셀 검사·동기화 조작·키보드/UIA·테마·DPI가 정상 동작합니다.
  • 명시적인 다중 이미지 열기에 비싼 폴더 전체 반복 디코딩이 재발하지 않습니다.

실행·완료 규칙

Windows MFC Viewer/Comparator만 대상이며 상위 설계와 AGENTS.md를 따릅니다. 최신 origin/master에서 작업 범위에 맞는 브랜치를 만들고 관계없는 변경을 보존합니다. 기존 명령 ID와 렌더링·데이터 경로를 재사용합니다. 관련 자동·수동 검사를 수행하고 공통 코드 또는 릴리즈에 민감한 코드 변경에는 로컬 CoreRegressionTests 및 두 Windows Release 빌드도 수행합니다. 브랜치/PR, 검증 증거, 남은 한계, 회귀 수정 내용을 기록합니다. 목업 또는 빌드 성공만으로 완료 처리하지 않습니다. 이 구현 단계에서는 릴리즈를 태그하거나 게시하지 않습니다.


English original — 영어 원문 펼치기

Coordination epic — work through the small jobs

This issue groups related work; it is not one implementation job or one all-at-once design approval. Review and complete the linked leaf issues separately. Their questions, narrow scopes and prerequisites govern execution. The older phase-wide material below is reference context.

Focused job UI screen, question and acceptance checks
Make Comparator source roles and filenames clear #129
Present honest metric scope, values and calculation states #130
Make sequence analysis graphs contextual and readable #131

Screen context

Proposed screen context

This is a UI proposal, not an implemented screenshot. Implement only the boundary of the leaf job under discussion, not every contextual element visible in the picture.

Coordination status: awaiting job-level discussion. Keep this epic open until its linked jobs have actual implementation/verification evidence. The first discussion is #117, typography only. No automatic next-job work or release.


Visual walkthrough and discussion

This phase makes comparison meaning readable, not a new multi-row layout. A and B are the actual analysis pair. C and D remain view-only; the UI must not suggest that their metrics were calculated.

Schematic only: these diagrams explain structure and behavior, not exact pixel geometry, font rendering, or an implemented Windows screenshot.

flowchart TD
  A["A: Reference"] --> METRIC["A ↔ B analysis<br/>Current frame / ROI / sequence average<br/>Actual PSNR · SSIM · LPIPS values"]
  B["B: Compared"] --> METRIC
  C["C: View only"] --> VIEW["Additional images for visual inspection<br/>No advertised C/D metric calculation"]
  D["D: View only"] --> VIEW
  METRIC --> STATE["Preparing / calculating / completed / cancelled / error<br/>Never present an old value or zero as a new result"]
  STILL["Still-image comparison"] --> COMPACT["Compact analysis; timeline collapsed"]
  SEQUENCE["Sequence comparison"] --> TEMPORAL["Frame controls and meaningful temporal graph"]
Loading

Historical phase-level discussion prompts (reference)

  • Can you immediately tell which files are A/B and what region/frame the numbers describe?

  • Should the temporal graph remain collapsed for still images and open only for sequences when needed?

  • Is the balance between image area, filenames, and metric values appropriate?

Reference status: use the focused leaf-job questions above for approval. This phase-wide material is not one implementation job.


Parent and dependencies

Parent: #110. Depends on #111, #112, #113. Complete and verify prerequisites before this stage.

Goal

Make comparison roles, metric scope, and analysis status readable without changing the comparison engine or panel layout model.

Implementation scope

  • Use shared fonts/surfaces/spacing in Comparator. Keep equal A/B panes with a 1 DIP separator, source headers at least 48 DIP, 28 DIP role markers, and accessible full filenames.
  • Label A as Reference and B as Compared. Report synchronization only when the actual state is synchronized.
  • Present a minimum 72 DIP analysis row with explicit A ↔ B scope and actual Current frame / ROI / Sequence average. Use 16 DIP monospaced values, 12 DIP channel/unit labels.
  • Preserve actual PSNR dB/channel output and infinite/unavailable cases; SSIM/LPIPS remain actual metrics, not invented quality percentages.
  • Distinguish preparation/pending/calculating/stale/cancelled/error/completed. Never show zero or an old frame's value as a newly completed calculation; don't invent a percent without a known denominator.
  • Hide temporal graphs initially for stills. For sequences, organize frame controls/progress and a collapsible graph (about 144 DIP initial height) with metric units, frame/time axis, current position, and uncomputed regions.
  • Current metric/difference scans apply to the first two panes only. Mark C/D View only and keep their image rendering unchanged.
  • Retain existing same-folder multi-file sequence-detection performance behavior from Windows Comparator: avoid repeated sequence scans and decoding when opening multiple images from one folder #107. No arbitrary pair selector, multi-row layout, new algorithms, or decoder rewrite in this phase.

Acceptance criteria

  • Displayed roles, frame/ROI/average scope, units, synchronization, and pending/error states match the actual engine.
  • A/B remains the only advertised metric pair; C/D is not visually dimmed or presented as analyzed.
  • Still-image comparison has no unnecessary sequence UI; sequence navigation and graph scope agree.
  • LPIPS preparation/cancel/failure, differing sizes, unfinished scans, infinity and unavailable results are handled honestly.
  • Zoom/pan/ROI/pixel inspection, synchronized operations, keyboard/UIA, theme and DPI behavior remain correct.
  • Explicit multi-image opening does not reintroduce expensive repeated directory decoding.

Execution and completion rules

Windows MFC Viewer/Comparator only; follow the parent specification and existing AGENTS.md. Start a focused branch from current origin/master and keep unrelated changes intact. Reuse existing command IDs and rendering/data paths. Run relevant automated/manual checks plus local CoreRegressionTests and both Windows Release builds for changes affecting shared or release-sensitive code. Record the branch/PR, verification evidence, remaining limitations, and any regression fixes. A mockup or build alone is not completion. Do not tag/publish a release in this implementation step.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions