1.8 KiB
1.8 KiB
Issue #18: Add page-by-page preview in the GUI after building
Summary
Add a PDF preview panel to the GUI that appears after a successful build. It renders PDF pages as images using Apache PDFBox and displays them with previous/next navigation and a page counter. The preview loads pages lazily for performance and updates automatically on new builds.
AC Verification Checklist
- After a successful build, a preview panel appears showing generated pages
- Users can navigate between pages (previous/next buttons)
- Current page number and total count displayed (e.g., "Seite 3 / 42")
- Preview renders actual PDF pages as images (PDF-to-image via PDFBox)
- Preview panel can be closed/hidden to return to normal view
- Preview updates automatically when a new build completes
- GUI remains responsive while preview is loading (async rendering)
Implementation Steps
Step 1: Add PDFBox dependency to gui module
Add org.apache.pdfbox:pdfbox:3.0.4 to gui/build.gradle.kts.
Step 2: Create PdfPreviewState class
A state holder for the preview: current page index, total pages, rendered page images (cached), loading state. Pages are rendered lazily — only the current page is rendered at a time.
Step 3: Create PdfPreviewPanel composable
A Compose panel with:
- An Image composable showing the current page
- Navigation row: "< Prev" button | "Seite X / Y" label | "Next >" button
- A close/hide button
- Loading indicator while page is rendering
Step 4: Integrate preview into App composable
After a successful build:
- Show a "Vorschau" button in the action buttons row
- When clicked, show the preview panel (replacing or overlaying the song list area)
- When a new build succeeds, update the preview automatically
Step 5: Lazy page rendering
Render pages on demand using coroutines on Dispatchers.IO to keep the UI responsive.